ZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmJha18wLmxvZyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLmJha18wLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGY4YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8uYmFrXzAubG9nCkBAIC0wLDAgKzEsMTE1OTYgQEAKKyFTRVNTSU9OIDIwMjEtMDktMjggMDk6MDc6MTguMTU3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtZGF0YSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcd3NwLUtvckFQLVNlcnZpY2VzIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCitUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIGxvZyBmaWxlIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXNcLm1ldGFkYXRhXC5iYWtfMC5sb2cKK0NyZWF0ZWQgVGltZTogMjAyMS0wOS0yOCAwOTowNzoyOC45MDkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0wOS0yOCAwOTowNzoyOC45MTcKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0wOS0yOCAwOTowNzo1OS4zNjAKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTA5LTI4IDA5OjA4OjAyLjEwNAorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMDktMjggMDk6MDg6MTMuNzU5CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIDQgNTY3IDIwMjEtMDktMjggMDk6MDk6NTQuMjg4CishTUVTU0FHRSBUaGUgcHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlICgucHJvamVjdCkgZm9yICdHbGVtbUNsaWVudCcgaXMgbWlzc2luZy4gIFRoaXMgZmlsZSBjb250YWlucyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QuICBUaGUgcHJvamVjdCB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseSB1bnRpbCB0aGlzIGZpbGUgaXMgcmVzdG9yZWQuCishU1RBQ0sgMAoramF2YS5sYW5nLkV4Y2VwdGlvbjogVGhlIHByb2plY3QgZGVzY3JpcHRpb24gZmlsZSAoLnByb2plY3QpIGZvciAnR2xlbW1DbGllbnQnIGlzIG1pc3NpbmcuICBUaGlzIGZpbGUgY29udGFpbnMgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0LiAgVGhlIHByb2plY3Qgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgdGhpcyBmaWxlIGlzIHJlc3RvcmVkLgorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlJlc291cmNlRXhjZXB0aW9uLnByb3ZpZGVTdGFja1RyYWNlKFJlc291cmNlRXhjZXB0aW9uLmphdmE6MzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUmVzb3VyY2VFeGNlcHRpb24uPGluaXQ+KFJlc291cmNlRXhjZXB0aW9uLmphdmE6MzUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5sb2NhbHN0b3JlLkZpbGVTeXN0ZW1SZXNvdXJjZU1hbmFnZXIucmVhZChGaWxlU3lzdGVtUmVzb3VyY2VNYW5hZ2VyLmphdmE6OTAzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlNhdmVNYW5hZ2VyLnJlc3RvcmVNZXRhSW5mbyhTYXZlTWFuYWdlci5qYXZhOjg4NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5TYXZlTWFuYWdlci5yZXN0b3JlKFNhdmVNYW5hZ2VyLmphdmE6NzU3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3Qub3BlbihQcm9qZWN0LmphdmE6MTA2MSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0Lm9wZW4oUHJvamVjdC5qYXZhOjExMDcpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5PcGVuUmVzb3VyY2VBY3Rpb24kMS5kb09wZW5XaXRoUmVmZXJlbmNlcyhPcGVuUmVzb3VyY2VBY3Rpb24uamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5PcGVuUmVzb3VyY2VBY3Rpb24kMS5ydW5JbldvcmtzcGFjZShPcGVuUmVzb3VyY2VBY3Rpb24uamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuSW50ZXJuYWxXb3Jrc3BhY2VKb2IucnVuKEludGVybmFsV29ya3NwYWNlSm9iLmphdmE6MzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCishU0VTU0lPTiAyMDIxLTA5LTI4IDA5OjIwOjQwLjY1MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1kYXRhIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXMgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0wOS0yOCAwOToyMDo0Ni4xMjcKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTA5LTI4IDA5OjIwOjUyLjM0MgorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTA5LTI4IDA5OjIxOjE2Ljk3OAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMDktMjggMDk6MjE6MjAuNDYzCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0wOS0yOCAwOToyMTozMi4xMjYKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMgNCA1NjcgMjAyMS0wOS0yOCAwOToyMTozOC4zNzQKKyFNRVNTQUdFIFRoZSBwcm9qZWN0IGRlc2NyaXB0aW9uIGZpbGUgKC5wcm9qZWN0KSBmb3IgJ0dsZW1tQ2xpZW50JyBpcyBtaXNzaW5nLiAgVGhpcyBmaWxlIGNvbnRhaW5zIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvamVjdC4gIFRoZSBwcm9qZWN0IHdpbGwgbm90IGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIHRoaXMgZmlsZSBpcyByZXN0b3JlZC4KKyFTVEFDSyAwCitqYXZhLmxhbmcuRXhjZXB0aW9uOiBUaGUgcHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlICgucHJvamVjdCkgZm9yICdHbGVtbUNsaWVudCcgaXMgbWlzc2luZy4gIFRoaXMgZmlsZSBjb250YWlucyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QuICBUaGUgcHJvamVjdCB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseSB1bnRpbCB0aGlzIGZpbGUgaXMgcmVzdG9yZWQuCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUmVzb3VyY2VFeGNlcHRpb24ucHJvdmlkZVN0YWNrVHJhY2UoUmVzb3VyY2VFeGNlcHRpb24uamF2YTozOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5SZXNvdXJjZUV4Y2VwdGlvbi48aW5pdD4oUmVzb3VyY2VFeGNlcHRpb24uamF2YTozNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmxvY2Fsc3RvcmUuRmlsZVN5c3RlbVJlc291cmNlTWFuYWdlci5yZWFkKEZpbGVTeXN0ZW1SZXNvdXJjZU1hbmFnZXIuamF2YTo5MDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuU2F2ZU1hbmFnZXIucmVzdG9yZU1ldGFJbmZvKFNhdmVNYW5hZ2VyLmphdmE6ODg2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlNhdmVNYW5hZ2VyLnJlc3RvcmUoU2F2ZU1hbmFnZXIuamF2YTo3NTcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdC5vcGVuKFByb2plY3QuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3Qub3BlbihQcm9qZWN0LmphdmE6MTEwNykKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLk9wZW5SZXNvdXJjZUFjdGlvbiQxLmRvT3BlbldpdGhSZWZlcmVuY2VzKE9wZW5SZXNvdXJjZUFjdGlvbi5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLk9wZW5SZXNvdXJjZUFjdGlvbiQxLnJ1bkluV29ya3NwYWNlKE9wZW5SZXNvdXJjZUFjdGlvbi5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDQgMCAyMDIxLTA5LTI4IDA5OjIzOjQ1LjM0OAorIU1FU1NBR0UgQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVAorIVNUQUNLIDEKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NvbnRhaW5zOiBNaXNzaW5nIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDEgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTA5LTI4IDA5OjIzOjQ1LjM1MQorIU1FU1NBR0UgQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMiBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMDktMjggMDk6MjM6NDUuMzUxCishTUVTU0FHRSBNaXNzaW5nIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgNCAwIDIwMjEtMDktMjggMDk6MjM6NDkuNDkzCishTUVTU0FHRSBDb3VsZCBub3QgZG93bmxvYWQgamF2YWRvYyBmb3IgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UCishU1RBQ0sgMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ29udGFpbnM6IE1pc3NpbmcgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMSBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMDktMjggMDk6MjM6NDkuNDkzCishTUVTU0FHRSBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAyIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0wOS0yOCAwOToyMzo0OS40OTMKKyFNRVNTQUdFIE1pc3NpbmcgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciA0IDAgMjAyMS0wOS0yOCAwOToyNzowMy4xOTUKKyFNRVNTQUdFIFVuYWJsZSB0byBjb25maWd1cmUgR2xlbW1TZXJ2aWNlcworIVNUQUNLIDAKK29yZy5lY2xpcHNlLm0yZS53dHAuTWFya2VkRXhjZXB0aW9uOiBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IuY29uZmlndXJlKFdUUFByb2plY3RDb25maWd1cmF0b3IuamF2YTo2OCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5wcm9qZWN0LmNvbmZpZ3VyYXRvci5BYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuY29uZmlndXJlKEFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5qYXZhOjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwMSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5jb25maWd1cmVOZXdNYXZlblByb2plY3RzKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjI4OCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MTc1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDEuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuaW1wb3J0UHJvamVjdHMoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MTQzKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYiQxLmRvQ3JlYXRlTWF2ZW5Qcm9qZWN0cyhJbXBvcnRNYXZlblByb2plY3RzSm9iLmphdmE6NjgpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5BYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24ucnVuKEFic3RyYWN0Q3JlYXRlTWF2ZW5Qcm9qZWN0c09wZXJhdGlvbi5qYXZhOjczKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5ydW5JbldvcmtzcGFjZShJbXBvcnRNYXZlblByb2plY3RzSm9iLmphdmE6NzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuSW50ZXJuYWxXb3Jrc3BhY2VKb2IucnVuKEludGVybmFsV29ya3NwYWNlSm9iLmphdmE6MzkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBPbmUgb3IgbW9yZSBjb25zdHJhaW50cyBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnlJbnRlcm5hbChGYWNldGVkUHJvamVjdC5qYXZhOjM2MykKKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tZXJnZUNoYW5nZXNJbnRlcm5hbChGYWNldGVkUHJvamVjdC5qYXZhOjExODEpCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QuYWNjZXNzJDIoRmFjZXRlZFByb2plY3QuamF2YToxMTE3KQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0JDEucnVuKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzI0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpCisJLi4uIDIwIG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDQgMCAyMDIxLTA5LTI4IDA5OjQ2OjE2LjY1MQorIU1FU1NBR0UgQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1QKKyFTVEFDSyAxCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ29udGFpbnM6IE1pc3NpbmcgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDEgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTA5LTI4IDA5OjQ2OjE2LjY1NQorIU1FU1NBR0UgQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDIgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTA5LTI4IDA5OjQ2OjE2LjY1NQorIU1FU1NBR0UgTWlzc2luZyBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciA0IDAgMjAyMS0wOS0yOCAwOTo0NjoxNi42NzkKKyFNRVNTQUdFIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UCishU1RBQ0sgMQorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NvbnRhaW5zOiBNaXNzaW5nIGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAxIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0wOS0yOCAwOTo0NjoxNi42NzkKKyFNRVNTQUdFIENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKyFTVUJFTlRSWSAyIG9yZy5lY2xpcHNlLm0yZS5jb3JlIDQgLTEgMjAyMS0wOS0yOCAwOTo0NjoxNi42NzkKKyFNRVNTQUdFIE1pc3NpbmcgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgNCAwIDIwMjEtMDktMjggMDk6NDc6MjUuMzcxCishTUVTU0FHRSBVbmFibGUgdG8gY29uZmlndXJlIHdmb3JtU2VydmljZXMKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSB3Zm9ybVNlcnZpY2VzCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuY29uZmlndXJlTmV3TWF2ZW5Qcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToyODgpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMS5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjE3NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmltcG9ydFByb2plY3RzKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjE0MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkltcG9ydE1hdmVuUHJvamVjdHNKb2IkMS5kb0NyZWF0ZU1hdmVuUHJvamVjdHMoSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5qYXZhOjY4KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLndpemFyZHMuQWJzdHJhY3RDcmVhdGVNYXZlblByb2plY3RzT3BlcmF0aW9uLnJ1bihBYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24uamF2YTo3MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkltcG9ydE1hdmVuUHJvamVjdHNKb2IucnVuSW5Xb3Jrc3BhY2UoSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5qYXZhOjc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogT25lIG9yIG1vcmUgY29uc3RyYWludHMgaGF2ZSBub3QgYmVlbiBzYXRpc2ZpZWQuCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5SW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YTozNjMpCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubWVyZ2VDaGFuZ2VzSW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YToxMTgxKQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0LmFjY2VzcyQyKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTExNykKKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdCQxLnJ1bihGYWNldGVkUHJvamVjdC5qYXZhOjMyNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeShGYWNldGVkUHJvamVjdC5qYXZhOjMzOSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmUoV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6MTM2KQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlUHJvamVjdChBYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjk1KQorCS4uLiAyMCBtb3JlCishU0VTU0lPTiAyMDIxLTA5LTI4IDExOjA2OjM2Ljc0NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMDktMjggMTE6MDY6NDEuMTMzCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0wOS0yOCAxMTowNjo1NS41NjUKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0wOS0yOCAxMTowNzoxMy4xMDYKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTA5LTI4IDExOjA3OjE2LjQ5MworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMDktMjggMTE6MDc6MzAuMDIzCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKyFTRVNTSU9OIDIwMjEtMDktMjkgMTY6MjA6MjUuMzc3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0wOS0yOSAxNjoyMDozNi4yMTkKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTA5LTI5IDE2OjIwOjU5LjE1OQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTA5LTI5IDE2OjIxOjU2LjA1OAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMDktMjkgMTY6MjI6MDEuMzk2CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0wOS0yOSAxNjoyMjoyMC42MjkKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorIVNFU1NJT04gMjAyMS0wOS0zMCAxMzowMDo1OC4zNjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTA5LTMwIDEzOjAxOjA5LjI0MQorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMDktMzAgMTM6MDE6NTkuNzA3CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMDktMzAgMTM6MDI6NTkuNjE4CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0wOS0zMCAxMzowMzowMi4zNjUKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTA5LTMwIDEzOjAzOjE3LjMxOQorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxMzoxMzoxOC45NjcKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTA5LTMwIDEzOjEzOjE4Ljk3MAorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6MzQuOTc2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1NjozNC45ODQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjM3LjE4MworIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6MzcuMTkxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1NjozNy43MjEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjM3LjcyOAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6MzguMjc1CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1Njo0My4xMzQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjQzLjE0MAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6NDMuMzIxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1Njo0My4zMzEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjQzLjU5MgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6NDMuNjA4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0wOS0zMCAxNzo1Njo0My42MjIKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTA5LTMwIDE3OjU2OjQzLjk3NAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMDktMzAgMTc6NTY6NDMuOTg1CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCishU0VTU0lPTiAyMDIxLTEwLTA1IDA5OjQ4OjQyLjQ4MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLWRhdGEgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXHdzcC1Lb3JBUC1TZXJ2aWNlcyAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTA1IDA5OjQ4OjQ3LjcwNQorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMDUgMDk6NDg6NTUuMDYyCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMDUgMDk6NDk6NDMuMjE3CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0wNSAwOTo0OTo0Ni4zMzEKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTA1IDA5OjUwOjAwLjczMworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCishU0VTU0lPTiAyMDIxLTEwLTA1IDEwOjAxOjUxLjczMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMDUgMTA6MDE6NTYuMTUyCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0wNSAxMDowMjo1NC43NDMKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0wNSAxMDowMzoxOS4yNzgKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTA1IDEwOjAzOjIyLjEwMQorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMDUgMTA6MDM6MzYuODA5CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDExOjM3OjE3LjkwMgorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMDUgMTE6Mzc6MTcuOTA2CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyNzo1Mi40MzEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDEzOjI3OjUyLjQzOQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjc6NTQuMTQ5CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyNzo1NC4xNTgKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDEzOjI3OjU1LjE1MgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjc6NTUuMTU4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyODowMC4xNzYKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTA1IDEzOjI4OjAwLjE5NAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMDUgMTM6Mjg6MDAuNTg0CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNSAxMzoyODowMC41ODkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKyFTRVNTSU9OIDIwMjEtMTAtMDUgMjI6MzY6MzYuOTgyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0wNSAyMjozNjo1Ni40NDkKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTA1IDIyOjM3OjI1LjQ0OQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTA1IDIyOjM4OjE3Ljg2MAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMDUgMjI6Mzg6MjQuNDgzCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0wNSAyMjozODozOS42OTAKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorIVNFU1NJT04gMjAyMS0xMC0wNiAxMjo0NzoyOC41NDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTA2IDEyOjQ3OjMzLjU2NAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMDYgMTI6NDc6NDYuNjA0CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMDYgMTI6NDg6MjQuODg0CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0wNiAxMjo0ODoyNy4wNzUKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTA2IDEyOjQ4OjQwLjUxNworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNiAxOTo0NDoyMy45MTIKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTA2IDE5OjQ0OjIzLjkxNgorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0wNyAxMDoxODoxMy4yOTUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTA3IDEwOjE4OjI0LjAxMworIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMDcgMTA6MTg6NDQuMTQ5CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMDcgMTA6MTk6MzUuMDIzCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0wNyAxMDoxOTo0MC4yNDQKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTA3IDEwOjE5OjUxLjk4OQorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wNyAxODowMDo1MC4xNzcKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTA3IDE4OjAwOjUwLjE4MgorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0wOCAxMTo1OTowMS4yNjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTA4IDExOjU5OjEyLjQ4NAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMDggMTE6NTk6MzMuOTM5CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMDggMTI6MDA6MzEuNTgyCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0wOCAxMjowMDozNi42NDYKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTA4IDEyOjAwOjUyLjM5OAorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0wOCAxNzoyMzoyMS4wMjIKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTA4IDE3OjIzOjIxLjAyNgorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0xMSAwOTozODozMi4xOTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTExIDA5OjM4OjQ0LjE3OAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMTEgMDk6Mzk6MDQuMzM2CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMTEgMDk6NDA6MDUuMzYxCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0xMSAwOTo0MDoxMS4xNjcKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTExIDA5OjQwOjI2LjQxNgorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xMSAxNzowNjowOC41NTcKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTExIDE3OjA2OjA4LjU2NQorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworCishRU5UUlkgb3JnLmVjbGlwc2UudWkgNCAwIDIwMjEtMTAtMTQgMDA6MTQ6MTQuOTU5CishTUVTU0FHRSBVbmhhbmRsZWQgZXZlbnQgbG9vcCBleGNlcHRpb24KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOiBBcmd1bWVudCBub3QgdmFsaWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1MzMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0Muc2V0Rm9yZWdyb3VuZChHQy5qYXZhOjQzNjkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3QmFja2dyb3VuZChDVGFiUmVuZGVyaW5nLmphdmE6MTA3NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5DVGFiUmVuZGVyaW5nLmRyYXdVbnNlbGVjdGVkVGFiQmFja2dyb3VuZChDVGFiUmVuZGVyaW5nLmphdmE6MTAwOCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5DVGFiUmVuZGVyaW5nLmRyYXdDdXN0b21CYWNrZ3JvdW5kKENUYWJSZW5kZXJpbmcuamF2YTo5OTApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3KENUYWJSZW5kZXJpbmcuamF2YToyMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLnVwZGF0ZUJrSW1hZ2VzKENUYWJGb2xkZXIuamF2YTozODg1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci5zZXRCdXR0b25Cb3VuZHMoQ1RhYkZvbGRlci5qYXZhOjI2MTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLnVwZGF0ZUl0ZW1zKENUYWJGb2xkZXIuamF2YTozNzk1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci51cGRhdGVJdGVtcyhDVGFiRm9sZGVyLmphdmE6MzcyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXIub25SZXNpemUoQ1RhYkZvbGRlci5qYXZhOjIxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLmxhbWJkYSQwKENUYWJGb2xkZXIuamF2YTozMzUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2VuZFJlc2l6ZShDb250cm9sLmphdmE6MzA2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2VuZFJlc2l6ZShDb21wb3NpdGUuamF2YToxMDMzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRCb3VuZHNJblBpeGVscyhDb21wb3NpdGUuamF2YToxMDgzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kcyhDb250cm9sLmphdmE6MzIyMykKKwlhdCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQubGF5b3V0KEZpbGxMYXlvdXQuamF2YToyMDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnVwZGF0ZUxheW91dChDb21wb3NpdGUuamF2YToxMzU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZW5kUmVzaXplKENvbXBvc2l0ZS5qYXZhOjEwMzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNldEJvdW5kc0luUGl4ZWxzKENvbXBvc2l0ZS5qYXZhOjEwODMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIzMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzKENvbnRyb2wuamF2YTozMjIzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dC5sYXlvdXQoRmlsbExheW91dC5qYXZhOjIwNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUudXBkYXRlTGF5b3V0KENvbXBvc2l0ZS5qYXZhOjEzNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNlbmRSZXNpemUoQ29tcG9zaXRlLmphdmE6MTAzNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0Qm91bmRzSW5QaXhlbHMoQ29tcG9zaXRlLmphdmE6MTA4MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzMwNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kcyhDb250cm9sLmphdmE6MzMwMCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LnNldFJlY3RhbmdsZShTYXNoTGF5b3V0LmphdmE6MjgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQudGlsZVN1Yk5vZGVzKFNhc2hMYXlvdXQuamF2YToyMjgpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU2FzaExheW91dC50aWxlU3ViTm9kZXMoU2FzaExheW91dC5qYXZhOjI3MSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LnRpbGVTdWJOb2RlcyhTYXNoTGF5b3V0LmphdmE6MjcxKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQudGlsZVN1Yk5vZGVzKFNhc2hMYXlvdXQuamF2YToyNzEpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU2FzaExheW91dC5sYXlvdXQoU2FzaExheW91dC5qYXZhOjE0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUudXBkYXRlTGF5b3V0KENvbXBvc2l0ZS5qYXZhOjEzNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNlbmRSZXNpemUoQ29tcG9zaXRlLmphdmE6MTAzNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuc2V0Qm91bmRzSW5QaXhlbHMoQ29tcG9zaXRlLmphdmE6MTA4MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHMoQ29udHJvbC5qYXZhOjMyMjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0LmxheW91dChGaWxsTGF5b3V0LmphdmE6MjA0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS51cGRhdGVMYXlvdXQoQ29tcG9zaXRlLmphdmE6MTM1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fU0laRShDb21wb3NpdGUuamF2YToxNzYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNjcm9sbGFibGUuY2FsbFdpbmRvd1Byb2MoU2Nyb2xsYWJsZS5qYXZhOjg4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuV01fV0lORE9XUE9TQ0hBTkdFRChDb250cm9sLmphdmE6NTY2NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NTMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5TZXRXaW5kb3dQb3MoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRCb3VuZHNJblBpeGVscyhDb21wb3NpdGUuamF2YToxMDc3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMzA0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzKENvbnRyb2wuamF2YTozMzAwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQubGF5b3V0KFN0YWNrTGF5b3V0LmphdmE6MTIzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS51cGRhdGVMYXlvdXQoQ29tcG9zaXRlLmphdmE6MTM1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fU0laRShDb21wb3NpdGUuamF2YToxNzYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNjcm9sbGFibGUuY2FsbFdpbmRvd1Byb2MoU2Nyb2xsYWJsZS5qYXZhOjg4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuV01fV0lORE9XUE9TQ0hBTkdFRChDb250cm9sLmphdmE6NTY2NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NTMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5TZXRXaW5kb3dQb3MoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRCb3VuZHNJblBpeGVscyhDb21wb3NpdGUuamF2YToxMDc3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMzA0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzKENvbnRyb2wuamF2YTozMzAwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQuc2V0UmVjdGFuZ2xlKFNhc2hMYXlvdXQuamF2YToyODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU2FzaExheW91dC50aWxlU3ViTm9kZXMoU2FzaExheW91dC5qYXZhOjIyOCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TYXNoTGF5b3V0LnRpbGVTdWJOb2RlcyhTYXNoTGF5b3V0LmphdmE6MjcxKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNhc2hMYXlvdXQubGF5b3V0KFNhc2hMYXlvdXQuamF2YToxNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnVwZGF0ZUxheW91dChDb21wb3NpdGUuamF2YToxMzU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9TSVpFKENvbXBvc2l0ZS5qYXZhOjE3NjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2Nyb2xsYWJsZS5jYWxsV2luZG93UHJvYyhTY3JvbGxhYmxlLmphdmE6ODgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5XTV9XSU5ET1dQT1NDSEFOR0VEKENvbnRyb2wuamF2YTo1NjY0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg1MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlNldFdpbmRvd1BvcyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnNldEJvdW5kc0luUGl4ZWxzKENvbXBvc2l0ZS5qYXZhOjEwNzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRCb3VuZHNJblBpeGVscyhDb250cm9sLmphdmE6MzIzMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzKENvbnRyb2wuamF2YTozMjIzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dC5sYXlvdXQoRmlsbExheW91dC5qYXZhOjIwNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUudXBkYXRlTGF5b3V0KENvbXBvc2l0ZS5qYXZhOjEzNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1NJWkUoQ29tcG9zaXRlLmphdmE6MTc2MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY3JvbGxhYmxlLmNhbGxXaW5kb3dQcm9jKFNjcm9sbGFibGUuamF2YTo4OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLldNX1dJTkRPV1BPU0NIQU5HRUQoQ29udHJvbC5qYXZhOjU2NjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODUzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRW5kRGVmZXJXaW5kb3dQb3MoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVzaXplQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6MTAwNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVzaXplQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTczKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRSZXNpemVDaGlsZHJlbihDb21wb3NpdGUuamF2YToxMTg1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9TSVpFKENvbXBvc2l0ZS5qYXZhOjE3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLldNX1NJWkUoQ2FudmFzLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLldNX1NJWkUoRGVjb3JhdGlvbnMuamF2YToxNjY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLldNX1dJTkRPV1BPU0NIQU5HRUQoQ29udHJvbC5qYXZhOjU2NjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLldNX1dJTkRPV1BPU0NIQU5HRUQoQ2FudmFzLmphdmE6NDU2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg1MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5TZXRNZW51KE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuc2V0TWVudUJhcihEZWNvcmF0aW9ucy5qYXZhOjEwNTYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudS5yZWxlYXNlUGFyZW50KE1lbnUuamF2YTo5NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODE3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIuZGlzcG9zZVdpZGdldChTV1RQYXJ0UmVuZGVyZXIuamF2YToxNzMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMS5oYW5kbGVFdmVudChXb3JrYmVuY2hXaW5kb3cuamF2YTozMjkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLlVJRXZlbnRIYW5kbGVyJDEucnVuKFVJRXZlbnRIYW5kbGVyLmphdmE6NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuRTRBcHBsaWNhdGlvbiQxLnN5bmNFeGVjKEU0QXBwbGljYXRpb24uamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLlVJRXZlbnRIYW5kbGVyLmhhbmRsZUV2ZW50KFVJRXZlbnRIYW5kbGVyLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJXcmFwcGVyLmhhbmRsZUV2ZW50KEV2ZW50SGFuZGxlcldyYXBwZXIuamF2YToyMDEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJUcmFja2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRIYW5kbGVyVHJhY2tlci5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50SGFuZGxlclRyYWNrZXIuZGlzcGF0Y2hFdmVudChFdmVudEhhbmRsZXJUcmFja2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuTGlzdGVuZXJRdWV1ZS5kaXNwYXRjaEV2ZW50U3luY2hyb25vdXMoTGlzdGVuZXJRdWV1ZS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50QWRtaW5JbXBsLmRpc3BhdGNoRXZlbnQoRXZlbnRBZG1pbkltcGwuamF2YToxMzUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEFkbWluSW1wbC5zZW5kRXZlbnQoRXZlbnRBZG1pbkltcGwuamF2YTo3OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50Q29tcG9uZW50LnNlbmRFdmVudChFdmVudENvbXBvbmVudC5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5FdmVudEJyb2tlci5zZW5kKEV2ZW50QnJva2VyLmphdmE6NTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlVJRXZlbnRQdWJsaXNoZXIubm90aWZ5Q2hhbmdlZChVSUV2ZW50UHVibGlzaGVyLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5CYXNpY05vdGlmaWVySW1wbC5lTm90aWZ5KEJhc2ljTm90aWZpZXJJbXBsLmphdmE6Mzc0KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLmFwcGxpY2F0aW9uLnVpLmltcGwuVUlFbGVtZW50SW1wbC5zZXRXaWRnZXQoVUlFbGVtZW50SW1wbC5qYXZhOjI2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIudW5iaW5kV2lkZ2V0KFNXVFBhcnRSZW5kZXJlci5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIubGFtYmRhJDAoU1dUUGFydFJlbmRlcmVyLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5kaXNwb3NlKERlY29yYXRpb25zLmphdmE6NDA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmRpc3Bvc2UoU2hlbGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWxlYXNlKERpc3BsYXkuamF2YTozNTg1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5EZXZpY2UuZGlzcG9zZShEZXZpY2UuamF2YToyOTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5tZXNzYWdlUHJvYyhEaXNwbGF5LmphdmE6MzEyMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZShPUy5qYXZhOjI3ODcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdy5ydW5FdmVudExvb3AoV2luZG93LmphdmE6ODE4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cub3BlbihXaW5kb3cuamF2YTo3OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IucHJvbXB0T25FeGl0KElERVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IuamF2YToyMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERVdvcmtiZW5jaEFkdmlzb3IkMS5oYW5kbGVFdmVudChJREVXb3JrYmVuY2hBZHZpc29yLmphdmE6MTY0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Lm1lc3NhZ2VQcm9jKERpc3BsYXkuamF2YTozMTMzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlKE9TLmphdmE6Mjc4NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUyOSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgMCAyMDIxLTEwLTE0IDAwOjE0OjE1Ljk4OAorIU1FU1NBR0UgVW5oYW5kbGVkIGV2ZW50IGxvb3AgZXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuTmF2aWdhdGlvbkhpc3RvcnkuZ2V0RGlzcGxheShOYXZpZ2F0aW9uSGlzdG9yeS5qYXZhOjE3NikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5OYXZpZ2F0aW9uSGlzdG9yeS5tYXJrRWRpdG9yKE5hdmlnYXRpb25IaXN0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UudXBkYXRlQWN0aXZlRWRpdG9yU291cmNlcyhXb3JrYmVuY2hQYWdlLmphdmE6NDMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UuZmlyZVBhcnRDbG9zZWQoV29ya2JlbmNoUGFnZS5qYXZhOjUyNTYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5UGFydC5sYW1iZGEkMChDb21wYXRpYmlsaXR5UGFydC5qYXZhOjEwNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5pbnRlcm5hbC5ldmVudHMuVUlFdmVudEhhbmRsZXIkMS5ydW4oVUlFdmVudEhhbmRsZXIuamF2YTo0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5FNEFwcGxpY2F0aW9uJDEuc3luY0V4ZWMoRTRBcHBsaWNhdGlvbi5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5pbnRlcm5hbC5ldmVudHMuVUlFdmVudEhhbmRsZXIuaGFuZGxlRXZlbnQoVUlFdmVudEhhbmRsZXIuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50SGFuZGxlcldyYXBwZXIuaGFuZGxlRXZlbnQoRXZlbnRIYW5kbGVyV3JhcHBlci5qYXZhOjIwMSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50SGFuZGxlclRyYWNrZXIuZGlzcGF0Y2hFdmVudChFdmVudEhhbmRsZXJUcmFja2VyLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRIYW5kbGVyVHJhY2tlci5kaXNwYXRjaEV2ZW50KEV2ZW50SGFuZGxlclRyYWNrZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5MaXN0ZW5lclF1ZXVlLmRpc3BhdGNoRXZlbnRTeW5jaHJvbm91cyhMaXN0ZW5lclF1ZXVlLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRBZG1pbkltcGwuZGlzcGF0Y2hFdmVudChFdmVudEFkbWluSW1wbC5qYXZhOjEzNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50QWRtaW5JbXBsLnNlbmRFdmVudChFdmVudEFkbWluSW1wbC5qYXZhOjc4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuZXZlbnQuRXZlbnRDb21wb25lbnQuc2VuZEV2ZW50KEV2ZW50Q29tcG9uZW50LmphdmE6MzkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLkV2ZW50QnJva2VyLnNlbmQoRXZlbnRCcm9rZXIuamF2YTo1MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guVUlFdmVudFB1Ymxpc2hlci5ub3RpZnlDaGFuZ2VkKFVJRXZlbnRQdWJsaXNoZXIuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkJhc2ljTm90aWZpZXJJbXBsLmVOb3RpZnkoQmFzaWNOb3RpZmllckltcGwuamF2YTozNzQpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkubW9kZWwuYXBwbGljYXRpb24udWkuaW1wbC5VSUVsZW1lbnRJbXBsLnNldFdpZGdldChVSUVsZW1lbnRJbXBsLmphdmE6MjYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNXVFBhcnRSZW5kZXJlci51bmJpbmRXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LlNXVFBhcnRSZW5kZXJlci5sYW1iZGEkMChTV1RQYXJ0UmVuZGVyZXIuamF2YToxMzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMucmVsZWFzZUNoaWxkcmVuKENhbnZhcy5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5yZWxlYXNlQ2hpbGRyZW4oRGVjb3JhdGlvbnMuamF2YTo3MjgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwucmVsZWFzZUNoaWxkcmVuKFNoZWxsLmphdmE6MTM0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LmRpc3Bvc2UoV2lkZ2V0LmphdmE6NDI2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmRpc3Bvc2UoRGVjb3JhdGlvbnMuamF2YTo0MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuZGlzcG9zZShTaGVsbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlbGVhc2UoRGlzcGxheS5qYXZhOjM1ODUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkRldmljZS5kaXNwb3NlKERldmljZS5qYXZhOjI5NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Lm1lc3NhZ2VQcm9jKERpc3BsYXkuamF2YTozMTIwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlKE9TLmphdmE6Mjc4NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93LnJ1bkV2ZW50TG9vcChXaW5kb3cuamF2YTo4MTgpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdy5vcGVuKFdpbmRvdy5qYXZhOjc5NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFV29ya2JlbmNoV2luZG93QWR2aXNvci5wcm9tcHRPbkV4aXQoSURFV29ya2JlbmNoV2luZG93QWR2aXNvci5qYXZhOjIyNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFV29ya2JlbmNoQWR2aXNvciQxLmhhbmRsZUV2ZW50KElERVdvcmtiZW5jaEFkdmlzb3IuamF2YToxNjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTEwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkubWVzc2FnZVByb2MoRGlzcGxheS5qYXZhOjMxMzMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZVcoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2UoT1MuamF2YToyNzg3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTI5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkgNCAwIDIwMjEtMTAtMTQgMDA6MTQ6MTYuMDU0CishTUVTU0FHRSBVbmhhbmRsZWQgZXZlbnQgbG9vcCBleGNlcHRpb24KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOiBBcmd1bWVudCBub3QgdmFsaWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1MzMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0Muc2V0Rm9yZWdyb3VuZChHQy5qYXZhOjQzNjkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3QmFja2dyb3VuZChDVGFiUmVuZGVyaW5nLmphdmE6MTA3NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5DVGFiUmVuZGVyaW5nLmRyYXdVbnNlbGVjdGVkVGFiQmFja2dyb3VuZChDVGFiUmVuZGVyaW5nLmphdmE6MTAwOCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5DVGFiUmVuZGVyaW5nLmRyYXdDdXN0b21CYWNrZ3JvdW5kKENUYWJSZW5kZXJpbmcuamF2YTo5OTApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ1RhYlJlbmRlcmluZy5kcmF3KENUYWJSZW5kZXJpbmcuamF2YToyMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLnVwZGF0ZUJrSW1hZ2VzKENUYWJGb2xkZXIuamF2YTozODg1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci5zZXRCdXR0b25Cb3VuZHMoQ1RhYkZvbGRlci5qYXZhOjI2MTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLnVwZGF0ZUl0ZW1zKENUYWJGb2xkZXIuamF2YTozNzk1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlci51cGRhdGVJdGVtcyhDVGFiRm9sZGVyLmphdmE6MzcyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXIub25SZXNpemUoQ1RhYkZvbGRlci5qYXZhOjIxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyLmxhbWJkYSQwKENUYWJGb2xkZXIuamF2YTozMzUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuV01fU0laRShDb250cm9sLmphdmE6NTQzMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY3JvbGxhYmxlLldNX1NJWkUoU2Nyb2xsYWJsZS5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUuV01fU0laRShDb21wb3NpdGUuamF2YToxNzUwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg0MCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNjcm9sbGFibGUuY2FsbFdpbmRvd1Byb2MoU2Nyb2xsYWJsZS5qYXZhOjg4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuV01fV0lORE9XUE9TQ0hBTkdFRChDb250cm9sLmphdmE6NTY2NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NTMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5TZXRXaW5kb3dQb3MoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnNldEJvdW5kc0luUGl4ZWxzKENvbnRyb2wuamF2YTozMjcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5zZXRCb3VuZHNJblBpeGVscyhDb21wb3NpdGUuamF2YToxMDc3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wuc2V0Qm91bmRzSW5QaXhlbHMoQ29udHJvbC5qYXZhOjMyMzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRTaXplSW5QaXhlbHMoQ29udHJvbC5qYXZhOjM3NzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC5zZXRTaXplKENvbnRyb2wuamF2YTozODA3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wucGFjayhDb250cm9sLmphdmE6MjIwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLnBhY2soQ29udHJvbC5qYXZhOjIxNzkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5BY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoQWN0aW9uQmFycy5qYXZhOjgxKQorCWF0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2tWaWV3LnNob3dQYWdlUmVjKFBhZ2VCb29rVmlldy5qYXZhOjk1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZS5zaG93UGFnZVJlYyhDb250ZW50T3V0bGluZS5qYXZhOjIzOCkKKwlhdCBvcmcuZWNsaXBzZS51aS5wYXJ0LlBhZ2VCb29rVmlldy5wYXJ0SGlkZGVuKFBhZ2VCb29rVmlldy5qYXZhOjEwOTApCisJYXQgb3JnLmVjbGlwc2UudWkucGFydC5QYWdlQm9va1ZpZXckMS5wYXJ0SGlkZGVuKFBhZ2VCb29rVmlldy5qYXZhOjEwNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZSQyOS5ydW4oV29ya2JlbmNoUGFnZS5qYXZhOjU0MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLmZpcmVQYXJ0SGlkZGVuKFdvcmtiZW5jaFBhZ2UuamF2YTo1NDA2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVBhcnQubGFtYmRhJDAoQ29tcGF0aWJpbGl0eVBhcnQuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLlVJRXZlbnRIYW5kbGVyJDEucnVuKFVJRXZlbnRIYW5kbGVyLmphdmE6NDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuRTRBcHBsaWNhdGlvbiQxLnN5bmNFeGVjKEU0QXBwbGljYXRpb24uamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuaW50ZXJuYWwuZXZlbnRzLlVJRXZlbnRIYW5kbGVyLmhhbmRsZUV2ZW50KFVJRXZlbnRIYW5kbGVyLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJXcmFwcGVyLmhhbmRsZUV2ZW50KEV2ZW50SGFuZGxlcldyYXBwZXIuamF2YToyMDEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEhhbmRsZXJUcmFja2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRIYW5kbGVyVHJhY2tlci5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50SGFuZGxlclRyYWNrZXIuZGlzcGF0Y2hFdmVudChFdmVudEhhbmRsZXJUcmFja2VyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuTGlzdGVuZXJRdWV1ZS5kaXNwYXRjaEV2ZW50U3luY2hyb25vdXMoTGlzdGVuZXJRdWV1ZS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50QWRtaW5JbXBsLmRpc3BhdGNoRXZlbnQoRXZlbnRBZG1pbkltcGwuamF2YToxMzUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5ldmVudC5FdmVudEFkbWluSW1wbC5zZW5kRXZlbnQoRXZlbnRBZG1pbkltcGwuamF2YTo3OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmV2ZW50LkV2ZW50Q29tcG9uZW50LnNlbmRFdmVudChFdmVudENvbXBvbmVudC5qYXZhOjM5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLmludGVybmFsLmV2ZW50cy5FdmVudEJyb2tlci5zZW5kKEV2ZW50QnJva2VyLmphdmE6NTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlVJRXZlbnRQdWJsaXNoZXIubm90aWZ5Q2hhbmdlZChVSUV2ZW50UHVibGlzaGVyLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5CYXNpY05vdGlmaWVySW1wbC5lTm90aWZ5KEJhc2ljTm90aWZpZXJJbXBsLmphdmE6Mzc0KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLmFwcGxpY2F0aW9uLnVpLmltcGwuVUlFbGVtZW50SW1wbC5zZXRXaWRnZXQoVUlFbGVtZW50SW1wbC5qYXZhOjI2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIudW5iaW5kV2lkZ2V0KFNXVFBhcnRSZW5kZXJlci5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIubGFtYmRhJDAoU1dUUGFydFJlbmRlcmVyLmphdmE6MTM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMucmVsZWFzZUNoaWxkcmVuKERlY29yYXRpb25zLmphdmE6NzI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLnJlbGVhc2VDaGlsZHJlbihTaGVsbC5qYXZhOjEzNDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5kaXNwb3NlKERlY29yYXRpb25zLmphdmE6NDA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmRpc3Bvc2UoU2hlbGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWxlYXNlKERpc3BsYXkuamF2YTozNTg1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5EZXZpY2UuZGlzcG9zZShEZXZpY2UuamF2YToyOTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5tZXNzYWdlUHJvYyhEaXNwbGF5LmphdmE6MzEyMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5QZWVrTWVzc2FnZShPUy5qYXZhOjI3ODcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdy5ydW5FdmVudExvb3AoV2luZG93LmphdmE6ODE4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cub3BlbihXaW5kb3cuamF2YTo3OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IucHJvbXB0T25FeGl0KElERVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IuamF2YToyMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERVdvcmtiZW5jaEFkdmlzb3IkMS5oYW5kbGVFdmVudChJREVXb3JrYmVuY2hBZHZpc29yLmphdmE6MTY0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExMCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Lm1lc3NhZ2VQcm9jKERpc3BsYXkuamF2YTozMTMzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc2NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlKE9TLmphdmE6Mjc4NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUyOSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKyFTRVNTSU9OIDIwMjEtMTAtMTQgMDg6NDg6MDYuMjQ1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0xNCAwODo0ODoxNi45NjUKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMgMiAxMDAzNSAyMDIxLTEwLTE0IDA4OjQ4OjI1LjcwNAorIU1FU1NBR0UgVGhlIHdvcmtzcGFjZSBleGl0ZWQgd2l0aCB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIHByZXZpb3VzIHNlc3Npb247IHJlZnJlc2hpbmcgd29ya3NwYWNlIHRvIHJlY292ZXIgY2hhbmdlcy4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0xNCAwODo0ODozNy43ODUKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0xNCAwODo0OTozNS40ODIKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTE0IDA4OjQ5OjQxLjk1OAorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMTQgMDg6NDk6NTcuODQwCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE0IDA4OjUzOjEzLjU4NworIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMTQgMDg6NTM6MTMuNTkxCishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTEwLTE1IDA3OjEwOjQxLjc4OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMTUgMDc6MTA6NTQuMTM2CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0xNSAwNzoxMToxNi4xOTIKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0xNSAwNzoxMjoyNy41MjIKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTE1IDA3OjEyOjQwLjE1NworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMTUgMDc6MTI6NDkuNTQ5CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE1IDA3OjI5OjI3LjM2NgorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMTUgMDc6Mjk6MjcuMzY2CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDAgMjAyMS0xMC0xNSAwOTowNTowNy45NTYKKyFNRVNTQUdFIFVuaGFuZGxlZCBldmVudCBsb29wIGV4Y2VwdGlvbgorIVNUQUNLIDAKK29yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb246IEdyYXBoaWMgaXMgZGlzcG9zZWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1NTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UuZ2V0Qm91bmRzKEltYWdlLmphdmE6MTI2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5nZXRUb3RhbFNpemUoQ0xhYmVsLmphdmE6MjY2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLm9uUGFpbnQoQ0xhYmVsLmphdmE6NDI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmxhbWJkYSQwKENMYWJlbC5qYXZhOjExOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToyMzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9QQUlOVChDb21wb3NpdGUuamF2YToxNTYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDgyMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5WdGJsQ2FsbChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC5vbGUud2luMzIuSU9sZUluUGxhY2VPYmplY3QuSW5QbGFjZURlYWN0aXZhdGUoSU9sZUluUGxhY2VPYmplY3QuamF2YToyMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuZGVhY3RpdmF0ZUluUGxhY2VDbGllbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUub25EaXNwb3NlKE9sZUNsaWVudFNpdGUuamF2YTo5NTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmFjY2VzcyQxKE9sZUNsaWVudFNpdGUuamF2YTo5NDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlJDEuaGFuZGxlRXZlbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjEyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnJlbGVhc2VDaGlsZHJlbihEZWNvcmF0aW9ucy5qYXZhOjcyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5yZWxlYXNlQ2hpbGRyZW4oU2hlbGwuamF2YToxMzQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5qYXZhOjUyMSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlSW5mb3JtYXRpb25Db250cm9sKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMTkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzM0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuZGlzcG9zZShUZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmphdmE6Mzc4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlci5oYW5kbGVEaXNwb3NlKFRleHRWaWV3ZXIuamF2YToxODc0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKFNvdXJjZVZpZXdlci5qYXZhOjc4OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25WaWV3ZXIuaGFuZGxlRGlzcG9zZShQcm9qZWN0aW9uVmlld2VyLmphdmE6MTI5NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoSmF2YVNvdXJjZVZpZXdlci5qYXZhOjUwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIkMi53aWRnZXREaXNwb3NlZChUZXh0Vmlld2VyLmphdmE6MTczMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5ub3RpZnlMaXN0ZW5lcnMoV2lkZ2V0LmphdmE6Nzc1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5oYW5kbGVEaXNwb3NlKFN0eWxlZFRleHQuamF2YTo1OTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5sYW1iZGEkMShTdHlsZWRUZXh0LmphdmE6NTczOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTczKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuamF2YToyNzApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuaGFyZENsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE5OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjEwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDEwLnJ1bihXb3JrYmVuY2guamF2YToxMTY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmJ1c3lDbG9zZShXb3JrYmVuY2guamF2YToxMTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkNChXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDAzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYwNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjQ5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQ2LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjUzMSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5XQldSZW5kZXJlci5sYW1iZGEkNChXQldSZW5kZXJlci5qYXZhOjYxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNoZWxsTGlzdGVuZXIkMi5zaGVsbENsb3NlZChTaGVsbExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmNsb3NlV2lkZ2V0KERlY29yYXRpb25zLmphdmE6MjgxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLldNX0NMT1NFKERlY29yYXRpb25zLmphdmE6MTU3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ3NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRpc3BhdGNoTWVzc2FnZShPUy5qYXZhOjIzMDMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCishU0VTU0lPTiAyMDIxLTEwLTE1IDA5OjA2OjIwLjM1MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMTUgMDk6MDY6MjQuNjk1CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0xNSAwOTowNjozMi44MjcKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0xNSAwOTowNzowNC44NjkKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTE1IDA5OjA3OjA2LjMwMQorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMTUgMDk6MDc6MjQuMjIzCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE1IDExOjM2OjAzLjY4NworIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMTUgMTE6MzY6MDMuNjkxCishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CishU0VTU0lPTiAyMDIxLTEwLTE4IDEzOjA4OjQ2LjIzMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMTggMTM6MDg6NTguMDExCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0xOCAxMzowOToyMC4yODMKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0xOCAxMzoxMDoyMi41ODkKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTE4IDEzOjEwOjI3LjUyMAorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMTggMTM6MTA6NDQuODkzCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE4IDEzOjI4OjQwLjUyMworIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMTggMTM6Mjg6NDAuNTI3CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xOCAxNTozNTozNi4yMjkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE4IDE1OjM1OjM2LjIzNgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTggMTU6MzU6MzcuODQzCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xOCAxNTozNTozNy44NTAKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTE4IDE1OjM1OjQ0LjU5MQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTggMTU6MzU6NDQuNTk2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0xOCAxNTozNTo0NC42NTkKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKyFTRVNTSU9OIDIwMjEtMTAtMTggMTY6NTE6NDMuMDk0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0xOCAxNjo1MTo0Ny40NDYKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTE4IDE2OjUyOjA2LjIyOQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTE4IDE2OjUyOjMwLjc0MworIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMTggMTY6NTI6MzMuMzAzCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0xOCAxNjo1Mjo0NS41OTgKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMTggMTY6NTU6MjkuNjEwCishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0xOCAxNjo1NToyOS42MTMKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgMCAyMDIxLTEwLTE5IDE4OjExOjA2LjIzMgorIU1FU1NBR0UgVW5oYW5kbGVkIGV2ZW50IGxvb3AgZXhjZXB0aW9uCishU1RBQ0sgMAorb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbjogR3JhcGhpYyBpcyBkaXNwb3NlZAorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDU1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZS5nZXRCb3VuZHMoSW1hZ2UuamF2YToxMjYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmdldFRvdGFsU2l6ZShDTGFiZWwuamF2YToyNjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwub25QYWludChDTGFiZWwuamF2YTo0MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwubGFtYmRhJDAoQ0xhYmVsLmphdmE6MTE5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjIzMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1BBSU5UKENvbXBvc2l0ZS5qYXZhOjE1NjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODIyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlZ0YmxDYWxsKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLm9sZS53aW4zMi5JT2xlSW5QbGFjZU9iamVjdC5JblBsYWNlRGVhY3RpdmF0ZShJT2xlSW5QbGFjZU9iamVjdC5qYXZhOjIxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5kZWFjdGl2YXRlSW5QbGFjZUNsaWVudChPbGVDbGllbnRTaXRlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5vbkRpc3Bvc2UoT2xlQ2xpZW50U2l0ZS5qYXZhOjk1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuYWNjZXNzJDEoT2xlQ2xpZW50U2l0ZS5qYXZhOjk0NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUkMS5oYW5kbGVFdmVudChPbGVDbGllbnRTaXRlLmphdmE6MTI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMucmVsZWFzZUNoaWxkcmVuKERlY29yYXRpb25zLmphdmE6NzI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLnJlbGVhc2VDaGlsZHJlbihTaGVsbC5qYXZhOjEzNDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5kaXNwb3NlKERlY29yYXRpb25zLmphdmE6NDA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmRpc3Bvc2UoU2hlbGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5kaXNwb3NlKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sLmphdmE6NTIxKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2VJbmZvcm1hdGlvbkNvbnRyb2woQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6MTMxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMzQpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlKEFic3RyYWN0SG92ZXJJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlckhvdmVyTWFuYWdlci5kaXNwb3NlKFRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuamF2YTozNzgpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyLmhhbmRsZURpc3Bvc2UoVGV4dFZpZXdlci5qYXZhOjE4NzQpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoU291cmNlVmlld2VyLmphdmE6Nzg4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLnByb2plY3Rpb24uUHJvamVjdGlvblZpZXdlci5oYW5kbGVEaXNwb3NlKFByb2plY3Rpb25WaWV3ZXIuamF2YToxMjk2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkphdmFTb3VyY2VWaWV3ZXIuaGFuZGxlRGlzcG9zZShKYXZhU291cmNlVmlld2VyLmphdmE6NTA5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlciQyLndpZGdldERpc3Bvc2VkKFRleHRWaWV3ZXIuamF2YToxNzMxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0Lm5vdGlmeUxpc3RlbmVycyhXaWRnZXQuamF2YTo3NzUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0LmhhbmRsZURpc3Bvc2UoU3R5bGVkVGV4dC5qYXZhOjU5MTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0LmxhbWJkYSQxKFN0eWxlZFRleHQuamF2YTo1NzM5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIuZGlzcG9zZVdpZGdldChTV1RQYXJ0UmVuZGVyZXIuamF2YToxNzMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuZGlzcG9zZVdpZGdldChDb250cmlidXRlZFBhcnRSZW5kZXJlci5qYXZhOjI3MCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTU1KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5FbGVtZW50UmVmZXJlbmNlUmVuZGVyZXIuZGlzcG9zZVdpZGdldChFbGVtZW50UmVmZXJlbmNlUmVuZGVyZXIuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5oYXJkQ2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTk5NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYnVzeUNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MTApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmFjY2VzcyQxOChXb3JrYmVuY2hXaW5kb3cuamF2YToxNTUyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQxMS5ydW4oV29ya2JlbmNoV2luZG93LmphdmE6MTYzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYzNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMTAucnVuKFdvcmtiZW5jaC5qYXZhOjExNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guYnVzeUNsb3NlKFdvcmtiZW5jaC5qYXZhOjExNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQ0KFdvcmtiZW5jaC5qYXZhOjE0MzApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNsb3NlKFdvcmtiZW5jaC5qYXZhOjE0MzApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNsb3NlKFdvcmtiZW5jaC5qYXZhOjE0MDMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjA2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2NDkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDYuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6NTMxKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LldCV1JlbmRlcmVyLmxhbWJkYSQ0KFdCV1JlbmRlcmVyLmphdmE6NjEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2hlbGxMaXN0ZW5lciQyLnNoZWxsQ2xvc2VkKFNoZWxsTGlzdGVuZXIuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuY2xvc2VXaWRnZXQoRGVjb3JhdGlvbnMuamF2YToyODEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuV01fQ0xPU0UoRGVjb3JhdGlvbnMuamF2YToxNTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDc2NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuUGVla01lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlBlZWtNZXNzYWdlKE9TLmphdmE6Mjc4NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUyOSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKyFTRVNTSU9OIDIwMjEtMTAtMjAgMTE6MjI6MDcuMzk5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yMCAxMToyMjoxOS4xNzkKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTIwIDExOjIyOjQxLjM1MQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTIwIDExOjIzOjQyLjgwNworIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjAgMTE6MjM6NDguOTc3CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yMCAxMToyNDowNS45NjYKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjAgMTI6MTE6MTIuNDI4CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yMCAxMjoxMToxMi40MzEKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgMCAyMDIxLTEwLTIyIDExOjA0OjQ5LjQxNworIU1FU1NBR0UgVW5oYW5kbGVkIGV2ZW50IGxvb3AgZXhjZXB0aW9uCishU1RBQ0sgMAorb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbjogR3JhcGhpYyBpcyBkaXNwb3NlZAorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDU1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZS5nZXRCb3VuZHMoSW1hZ2UuamF2YToxMjYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmdldFRvdGFsU2l6ZShDTGFiZWwuamF2YToyNjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwub25QYWludChDTGFiZWwuamF2YTo0MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwubGFtYmRhJDAoQ0xhYmVsLmphdmE6MTE5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjIzMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1BBSU5UKENvbXBvc2l0ZS5qYXZhOjE1NjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODIyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlZ0YmxDYWxsKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLm9sZS53aW4zMi5JT2xlSW5QbGFjZU9iamVjdC5JblBsYWNlRGVhY3RpdmF0ZShJT2xlSW5QbGFjZU9iamVjdC5qYXZhOjIxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5kZWFjdGl2YXRlSW5QbGFjZUNsaWVudChPbGVDbGllbnRTaXRlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5vbkRpc3Bvc2UoT2xlQ2xpZW50U2l0ZS5qYXZhOjk1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuYWNjZXNzJDEoT2xlQ2xpZW50U2l0ZS5qYXZhOjk0NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUkMS5oYW5kbGVFdmVudChPbGVDbGllbnRTaXRlLmphdmE6MTI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMucmVsZWFzZUNoaWxkcmVuKERlY29yYXRpb25zLmphdmE6NzI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLnJlbGVhc2VDaGlsZHJlbihTaGVsbC5qYXZhOjEzNDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5kaXNwb3NlKERlY29yYXRpb25zLmphdmE6NDA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmRpc3Bvc2UoU2hlbGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5kaXNwb3NlKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sLmphdmE6NTIxKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2VJbmZvcm1hdGlvbkNvbnRyb2woQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6MTMxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMzQpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlKEFic3RyYWN0SG92ZXJJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlckhvdmVyTWFuYWdlci5kaXNwb3NlKFRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuamF2YTozNzgpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyLmhhbmRsZURpc3Bvc2UoVGV4dFZpZXdlci5qYXZhOjE4NzQpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoU291cmNlVmlld2VyLmphdmE6Nzg4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLnByb2plY3Rpb24uUHJvamVjdGlvblZpZXdlci5oYW5kbGVEaXNwb3NlKFByb2plY3Rpb25WaWV3ZXIuamF2YToxMjk2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkphdmFTb3VyY2VWaWV3ZXIuaGFuZGxlRGlzcG9zZShKYXZhU291cmNlVmlld2VyLmphdmE6NTA5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlciQyLndpZGdldERpc3Bvc2VkKFRleHRWaWV3ZXIuamF2YToxNzMxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0Lm5vdGlmeUxpc3RlbmVycyhXaWRnZXQuamF2YTo3NzUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0LmhhbmRsZURpc3Bvc2UoU3R5bGVkVGV4dC5qYXZhOjU5MTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0LmxhbWJkYSQxKFN0eWxlZFRleHQuamF2YTo1NzM5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5TV1RQYXJ0UmVuZGVyZXIuZGlzcG9zZVdpZGdldChTV1RQYXJ0UmVuZGVyZXIuamF2YToxNzMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuZGlzcG9zZVdpZGdldChDb250cmlidXRlZFBhcnRSZW5kZXJlci5qYXZhOjI3MCkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTU1KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5FbGVtZW50UmVmZXJlbmNlUmVuZGVyZXIuZGlzcG9zZVdpZGdldChFbGVtZW50UmVmZXJlbmNlUmVuZGVyZXIuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5oYXJkQ2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTk5NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYnVzeUNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MTApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmFjY2VzcyQxOChXb3JrYmVuY2hXaW5kb3cuamF2YToxNTUyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQxMS5ydW4oV29ya2JlbmNoV2luZG93LmphdmE6MTYzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKEJ1c3lJbmRpY2F0b3IuamF2YTo3MSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYzNSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMTAucnVuKFdvcmtiZW5jaC5qYXZhOjExNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guYnVzeUNsb3NlKFdvcmtiZW5jaC5qYXZhOjExNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQ0KFdvcmtiZW5jaC5qYXZhOjE0MzApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNsb3NlKFdvcmtiZW5jaC5qYXZhOjE0MzApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNsb3NlKFdvcmtiZW5jaC5qYXZhOjE0MDMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjA2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2NDkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDYuY2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6NTMxKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LldCV1JlbmRlcmVyLmxhbWJkYSQ0KFdCV1JlbmRlcmVyLmphdmE6NjEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2hlbGxMaXN0ZW5lciQyLnNoZWxsQ2xvc2VkKFNoZWxsTGlzdGVuZXIuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuY2xvc2VXaWRnZXQoRGVjb3JhdGlvbnMuamF2YToyODEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuV01fQ0xPU0UoRGVjb3JhdGlvbnMuamF2YToxNTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDc2NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jVyhOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EZWZXaW5kb3dQcm9jKE9TLmphdmE6MjI5OCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5jYWxsV2luZG93UHJvYyhTaGVsbC5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ4NjMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRpc3BhdGNoTWVzc2FnZVcoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGlzcGF0Y2hNZXNzYWdlKE9TLmphdmE6MjMwMykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUzMikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKyFTRVNTSU9OIDIwMjEtMTAtMjIgMTE6MzM6MjIuOTE1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yMiAxMTozMzozOS44MzEKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTIyIDExOjM0OjE4LjY5NQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTIyIDExOjM1OjQ0LjIzMworIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjIgMTE6MzU6NTYuMjUzCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yMiAxMTozNjoxNy41NzMKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjIgMTI6MTU6MDIuMzk1CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yMiAxMjoxNTowMi4zOTgKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMjIgMTk6NTc6MTEuNTE1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yMiAxOTo1NzoxNi41MDEKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTIyIDE5OjU3OjMwLjUzNworIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTIyIDE5OjU4OjA3LjY5MQorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjIgMTk6NTg6MTEuNDUwCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yMiAxOTo1ODoyNS45MTQKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjIgMjE6MDE6MDguMjc1CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yMiAyMTowMTowOC4yNzkKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjIxLjg0OQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6MjEuODU4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzoyMy45MjIKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjIzLjkzMQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6MzYuMzcxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzozNi4zNzgKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjM5LjAxNworIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6MzkuMDIyCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzozOS4xNzcKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjM5LjIwNAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgNCAwIDIwMjEtMTAtMjMgMTk6MzM6NDAuMDU4CishTUVTU0FHRSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVAorIVNUQUNLIDEKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDb250YWluczogTWlzc2luZyBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMSBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMTAtMjMgMTk6MzM6NDAuMDYwCishTUVTU0FHRSBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCishU1VCRU5UUlkgMiBvcmcuZWNsaXBzZS5tMmUuY29yZSA0IC0xIDIwMjEtMTAtMjMgMTk6MzM6NDAuMDYwCishTUVTU0FHRSBNaXNzaW5nIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDQgMCAyMDIxLTEwLTIzIDE5OjMzOjQwLjA5OAorIU1FU1NBR0UgQ291bGQgbm90IGRvd25sb2FkIGphdmFkb2MgZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QKKyFTVEFDSyAxCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ29udGFpbnM6IE1pc3NpbmcgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDEgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTEwLTIzIDE5OjMzOjQwLjA5OQorIU1FU1NBR0UgQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorIVNVQkVOVFJZIDIgb3JnLmVjbGlwc2UubTJlLmNvcmUgNCAtMSAyMDIxLTEwLTIzIDE5OjMzOjQwLjA5OQorIU1FU1NBR0UgTWlzc2luZyBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzo0MC44NjAKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjMzOjQwLjg2MworIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6MzM6NDAuOTcxCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTozMzo0MC45NzQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQzLjQwNAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDMuNDEwCishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0My42MDMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQzLjYyMworIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDMuOTE3CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0My45MjMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ0LjA1MQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UuamZhY2UgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDUuODQ3CishTUVTU0FHRSBJZ25vcmVkIHJlZW50cmFudCBjYWxsIHdoaWxlIHZpZXdlciBpcyBidXN5LiBUaGlzIGlzIG9ubHkgbG9nZ2VkIG9uY2UgcGVyIHZpZXdlciBpbnN0YW5jZSwgYnV0IHNpbWlsYXIgY2FsbHMgd2lsbCBzdGlsbCBiZSBpZ25vcmVkLgorIVNUQUNLIDAKK2phdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5WaWV3ZXIuY2hlY2tCdXN5KENvbHVtblZpZXdlci5qYXZhOjc2MSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFic3RyYWN0VHJlZVZpZXdlci5hZGQoQWJzdHJhY3RUcmVlVmlld2VyLmphdmE6MTUwKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25WaWV3ZXIuYWRkKENvbW1vblZpZXdlci5qYXZhOjMwMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLndvcmtiZW5jaC5SZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlciQzLnJ1bihSZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlci5qYXZhOjI4NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLndvcmtiZW5jaC5SZXNvdXJjZUV4dGVuc2lvbkNvbnRlbnRQcm92aWRlci5ydW5VcGRhdGVzKFJlc291cmNlRXh0ZW5zaW9uQ29udGVudFByb3ZpZGVyLmphdmE6MzIzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMud29ya2JlbmNoLlJlc291cmNlRXh0ZW5zaW9uQ29udGVudFByb3ZpZGVyLmFjY2VzcyQxKFJlc291cmNlRXh0ZW5zaW9uQ29udGVudFByb3ZpZGVyLmphdmE6MzIxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMud29ya2JlbmNoLlJlc291cmNlRXh0ZW5zaW9uQ29udGVudFByb3ZpZGVyJDIucnVuKFJlc291cmNlRXh0ZW5zaW9uQ29udGVudFByb3ZpZGVyLmphdmE6MTQxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlJ1bm5hYmxlTG9jay5ydW4oUnVubmFibGVMb2NrLmphdmE6MzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnJ1bkFzeW5jTWVzc2FnZXMoU3luY2hyb25pemVyLmphdmE6MTgyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucnVuQXN5bmNNZXNzYWdlcyhEaXNwbGF5LmphdmE6MzkwNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUzNykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLkV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5ydW5FdmVudExvb3AoRXZlbnRMb29wUHJvZ3Jlc3NNb25pdG9yLmphdmE6MTI1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRpYWxvZ3MuRXZlbnRMb29wUHJvZ3Jlc3NNb25pdG9yLmlzQ2FuY2VsZWQoRXZlbnRMb29wUHJvZ3Jlc3NNb25pdG9yLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLlRocmVhZEpvYi5pc0NhbmNlbGVkKFRocmVhZEpvYi5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuVGhyZWFkSm9iLndhaXRGb3JSdW4oVGhyZWFkSm9iLmphdmE6MjczKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5UaHJlYWRKb2Iuam9pblJ1bihUaHJlYWRKb2IuamF2YToyMDIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLkltcGxpY2l0Sm9icy5iZWdpbihJbXBsaWNpdEpvYnMuamF2YTo5MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuSm9iTWFuYWdlci5iZWdpblJ1bGUoSm9iTWFuYWdlci5qYXZhOjMwOCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3JrTWFuYWdlci5jaGVja0luKFdvcmtNYW5hZ2VyLmphdmE6MTIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5wcmVwYXJlT3BlcmF0aW9uKFdvcmtzcGFjZS5qYXZhOjIyMzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLm1vZGVsLmludGVybmFsLmNvbW1vbi5BYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIubG9hZE1vZGVsKEFic3RyYWN0TWVyZ2VkTW9kZWxQcm92aWRlci5qYXZhOjI0OSkKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLm1vZGVsLmludGVybmFsLmNvbW1vbi5BYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuZ2V0TWVyZ2VkTW9kZWwoQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmphdmE6MjE5KQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUubW9kZWwuaW50ZXJuYWwuY29tbW9uLkFic3RyYWN0TWVyZ2VkTW9kZWxQcm92aWRlci5nZXRNb2RlbE9iamVjdChBYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuamF2YToxMzkpCisJYXQgb3JnLmVjbGlwc2UuanN0LmplZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IuSkVFNUNvbnRlbnRQcm92aWRlci5nZXRDYWNoZWRDb250ZW50UHJvdmlkZXIoSkVFNUNvbnRlbnRQcm92aWRlci5qYXZhOjk4KQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUudWkuaW50ZXJuYWwubmF2aWdhdG9yLldlYjI1Q29udGVudFByb3ZpZGVyLmdldENoaWxkcmVuKFdlYjI1Q29udGVudFByb3ZpZGVyLmphdmE6MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLmV4dGVuc2lvbnMuU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihTYWZlRGVsZWdhdGVUcmVlQ29udGVudFByb3ZpZGVyLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLmV4dGVuc2lvbnMuU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihTYWZlRGVsZWdhdGVUcmVlQ29udGVudFByb3ZpZGVyLmphdmE6MjQxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5leHRlbnNpb25zLlNhZmVEZWxlZ2F0ZVRyZWVDb250ZW50UHJvdmlkZXIuZ2V0Q2hpbGRyZW4oU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5qYXZhOjkzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5OYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlciQxLnJ1bihOYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5qYXZhOjE1NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5OYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5pbnRlcm5hbEdldENoaWxkcmVuKE5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyLmphdmE6MTQzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5OYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihOYXZpZ2F0b3JDb250ZW50U2VydmljZUNvbnRlbnRQcm92aWRlci5qYXZhOjEyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFic3RyYWN0VHJlZVZpZXdlci5nZXRSYXdDaGlsZHJlbihBYnN0cmFjdFRyZWVWaWV3ZXIuamF2YToxNDA5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlci5nZXRSYXdDaGlsZHJlbihUcmVlVmlld2VyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5nZXRGaWx0ZXJlZENoaWxkcmVuKFN0cnVjdHVyZWRWaWV3ZXIuamF2YTo5MDApCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BYnN0cmFjdFRyZWVWaWV3ZXIuZ2V0U29ydGVkQ2hpbGRyZW4oQWJzdHJhY3RUcmVlVmlld2VyLmphdmE6NjE4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQWJzdHJhY3RUcmVlVmlld2VyLnVwZGF0ZUNoaWxkcmVuKEFic3RyYWN0VHJlZVZpZXdlci5qYXZhOjI2NTcpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BYnN0cmFjdFRyZWVWaWV3ZXIuaW50ZXJuYWxSZWZyZXNoU3RydWN0KEFic3RyYWN0VHJlZVZpZXdlci5qYXZhOjE5NDcpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyLmludGVybmFsUmVmcmVzaFN0cnVjdChUcmVlVmlld2VyLmphdmE6Njc0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQWJzdHJhY3RUcmVlVmlld2VyLmludGVybmFsUmVmcmVzaFN0cnVjdChBYnN0cmFjdFRyZWVWaWV3ZXIuamF2YToxOTUzKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlci5pbnRlcm5hbFJlZnJlc2hTdHJ1Y3QoVHJlZVZpZXdlci5qYXZhOjY3NCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFic3RyYWN0VHJlZVZpZXdlci5pbnRlcm5hbFJlZnJlc2goQWJzdHJhY3RUcmVlVmlld2VyLmphdmE6MTkyMykKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFic3RyYWN0VHJlZVZpZXdlci5pbnRlcm5hbFJlZnJlc2goQWJzdHJhY3RUcmVlVmlld2VyLmphdmE6MTg4MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uVmlld2VyLmludGVybmFsUmVmcmVzaChDb21tb25WaWV3ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyLmxhbWJkYSQzKFN0cnVjdHVyZWRWaWV3ZXIuamF2YToxNTMwKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5wcmVzZXJ2aW5nU2VsZWN0aW9uKFN0cnVjdHVyZWRWaWV3ZXIuamF2YToxNDQ2KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlci5wcmVzZXJ2aW5nU2VsZWN0aW9uKFRyZWVWaWV3ZXIuamF2YTozNjApCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyLnByZXNlcnZpbmdTZWxlY3Rpb24oU3RydWN0dXJlZFZpZXdlci5qYXZhOjE0MDcpCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyLnJlZnJlc2goU3RydWN0dXJlZFZpZXdlci5qYXZhOjE1MzApCisJYXQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5WaWV3ZXIucmVmcmVzaChDb2x1bW5WaWV3ZXIuamF2YTo1MzUpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vblZpZXdlci5yZWZyZXNoKENvbW1vblZpZXdlci5qYXZhOjM0OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uVmlld2VyLnJlZnJlc2goQ29tbW9uVmlld2VyLmphdmE6NDkyKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5yZWZyZXNoKFN0cnVjdHVyZWRWaWV3ZXIuamF2YToxNDY2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5Xb3JraW5nU2V0QWN0aW9uUHJvdmlkZXIkV29ya2luZ1NldE1hbmFnZXJMaXN0ZW5lci5wcm9wZXJ0eUNoYW5nZShXb3JraW5nU2V0QWN0aW9uUHJvdmlkZXIuamF2YToxMTcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuQWJzdHJhY3RXb3JraW5nU2V0TWFuYWdlciQ1LnJ1bihBYnN0cmFjdFdvcmtpbmdTZXRNYW5hZ2VyLmphdmE6Mzc1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuQWJzdHJhY3RXb3JraW5nU2V0TWFuYWdlci5sYW1iZGEkMShBYnN0cmFjdFdvcmtpbmdTZXRNYW5hZ2VyLmphdmE6MzgzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkFic3RyYWN0V29ya2luZ1NldE1hbmFnZXIuZmlyZVByb3BlcnR5Q2hhbmdlKEFic3RyYWN0V29ya2luZ1NldE1hbmFnZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuQWJzdHJhY3RXb3JraW5nU2V0TWFuYWdlci53b3JraW5nU2V0Q2hhbmdlZChBYnN0cmFjdFdvcmtpbmdTZXRNYW5hZ2VyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtpbmdTZXRNYW5hZ2VyLndvcmtpbmdTZXRDaGFuZ2VkKFdvcmtpbmdTZXRNYW5hZ2VyLmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkFic3RyYWN0V29ya2luZ1NldC5maXJlV29ya2luZ1NldENoYW5nZWQoQWJzdHJhY3RXb3JraW5nU2V0LmphdmE6MTM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtpbmdTZXQuc2V0RWxlbWVudHMoV29ya2luZ1NldC5qYXZhOjI0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5sYW1iZGEkMChEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MjE2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlJ1bm5hYmxlTG9jay5ydW4oUnVubmFibGVMb2NrLmphdmE6MzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnJ1bkFzeW5jTWVzc2FnZXMoU3luY2hyb25pemVyLmphdmE6MTgyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucnVuQXN5bmNNZXNzYWdlcyhEaXNwbGF5LmphdmE6MzkwNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUzNykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kaWFsb2dzLkV2ZW50TG9vcFByb2dyZXNzTW9uaXRvci5ydW5FdmVudExvb3AoRXZlbnRMb29wUHJvZ3Jlc3NNb25pdG9yLmphdmE6MTI1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRpYWxvZ3MuRXZlbnRMb29wUHJvZ3Jlc3NNb25pdG9yLmlzQ2FuY2VsZWQoRXZlbnRMb29wUHJvZ3Jlc3NNb25pdG9yLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLlRocmVhZEpvYi5pc0NhbmNlbGVkKFRocmVhZEpvYi5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuVGhyZWFkSm9iLndhaXRGb3JSdW4oVGhyZWFkSm9iLmphdmE6MjczKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5UaHJlYWRKb2Iuam9pblJ1bihUaHJlYWRKb2IuamF2YToyMDIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLkltcGxpY2l0Sm9icy5iZWdpbihJbXBsaWNpdEpvYnMuamF2YTo5MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuSm9iTWFuYWdlci5iZWdpblJ1bGUoSm9iTWFuYWdlci5qYXZhOjMwOCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3JrTWFuYWdlci5jaGVja0luKFdvcmtNYW5hZ2VyLmphdmE6MTIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5wcmVwYXJlT3BlcmF0aW9uKFdvcmtzcGFjZS5qYXZhOjIyMzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLm1vZGVsLmludGVybmFsLmNvbW1vbi5BYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIubG9hZE1vZGVsKEFic3RyYWN0TWVyZ2VkTW9kZWxQcm92aWRlci5qYXZhOjI0OSkKKwlhdCBvcmcuZWNsaXBzZS5qc3QuamVlLm1vZGVsLmludGVybmFsLmNvbW1vbi5BYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuZ2V0TWVyZ2VkTW9kZWwoQWJzdHJhY3RNZXJnZWRNb2RlbFByb3ZpZGVyLmphdmE6MjE5KQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUubW9kZWwuaW50ZXJuYWwuY29tbW9uLkFic3RyYWN0TWVyZ2VkTW9kZWxQcm92aWRlci5nZXRNb2RlbE9iamVjdChBYnN0cmFjdE1lcmdlZE1vZGVsUHJvdmlkZXIuamF2YToxMzkpCisJYXQgb3JnLmVjbGlwc2UuanN0LmplZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IuSkVFNUNvbnRlbnRQcm92aWRlci5nZXRDYWNoZWRDb250ZW50UHJvdmlkZXIoSkVFNUNvbnRlbnRQcm92aWRlci5qYXZhOjk4KQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUudWkuaW50ZXJuYWwubmF2aWdhdG9yLldlYjI1Q29udGVudFByb3ZpZGVyLmdldENoaWxkcmVuKFdlYjI1Q29udGVudFByb3ZpZGVyLmphdmE6MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLmV4dGVuc2lvbnMuU2FmZURlbGVnYXRlVHJlZUNvbnRlbnRQcm92aWRlci5nZXRDaGlsZHJlbihTYWZlRGVsZWdhdGVUcmVlQ29udGVudFByb3ZpZGVyLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLk5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyJDEucnVuKE5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyLmphdmE6MTU3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLk5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyLmludGVybmFsR2V0Q2hpbGRyZW4oTmF2aWdhdG9yQ29udGVudFNlcnZpY2VDb250ZW50UHJvdmlkZXIuamF2YToxNDMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLk5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyLmdldENoaWxkcmVuKE5hdmlnYXRvckNvbnRlbnRTZXJ2aWNlQ29udGVudFByb3ZpZGVyLmphdmE6MTIyKQorCWF0IG9yZy5lY2xpcHNlLmpzdC5qZWUudWkuaW50ZXJuYWwubmF2aWdhdG9yLkpFRTVDb250ZW50UHJvdmlkZXIkMS5ydW4oSkVFNUNvbnRlbnRQcm92aWRlci5qYXZhOjE0MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0Ni4wNzQKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ2LjA3OAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDYuMTc5CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0Ni4xODIKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ2LjMwNAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDYuMzA4CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yMyAxOTo0OTo0Ni4zMTcKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTIzIDE5OjQ5OjQ2LjQ3NQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjMgMTk6NDk6NDYuNDk0CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCishU0VTU0lPTiAyMDIxLTEwLTIzIDIwOjEzOjI0Ljc3MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjMgMjA6MTM6MzUuNjY4CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yMyAyMDoxMzo1Mi40NTgKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yMyAyMDoxNDozMC43MzcKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTIzIDIwOjE0OjMyLjIyNQorIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjMgMjA6MTQ6NDUuOTYyCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKyFTRVNTSU9OIDIwMjEtMTAtMjUgMDk6MzY6NTguNzUyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yNSAwOTozNzowOC43OTgKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTI1IDA5OjM3OjI1LjAxNQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTI1IDA5OjM4OjE1LjIxNAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjUgMDk6Mzg6MTkuOTk3CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yNSAwOTozODozNi40OTcKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjUgMTk6MDM6MzIuNTk0CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yNSAxOTowMzozMi42MzQKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTAtMjYgMDc6MTk6MzYuNzIxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMC0yNiAwNzoxOTo0Ny43ODMKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTEwLTI2IDA3OjIwOjA2LjM2MQorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTEwLTI2IDA3OjIxOjUxLjA5OAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjYgMDc6MjE6NTMuOTc3CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMC0yNiAwNzoyMjowNi4zOTUKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMDc6Mjc6NDAuNDQ1CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMC0yNiAwNzoyNzo0MC40NDgKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDA3OjU4OjU5LjI3NworIU1FU1NBR0UgVW5rbm93biBvciB1bnN1cHBvcnRlZCBzb3VyY2UgbG9jYXRvciBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwubGF1bmNoaW5nLnNvdXJjZWxvb2t1cC5hZHZhbmNlZC5BZHZhbmNlZFNvdXJjZUxvb2t1cERpcmVjdG9yCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMDo1My42MzMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIwOjUzLjYzOQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjA6NTUuMjg2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMDo1NS4yOTMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIwOjU1Ljc4MAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjA6NTUuNzg2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMDo1Ni4xOTgKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIxOjAxLjYwOQorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjE6MDEuNjU2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMTowMS44NDMKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIxOjAxLjg1MAorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjE6MDIuMjQ2CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMTowMi4yNTEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE1OjIxOjAyLjI3MgorIU1FU1NBR0UgVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTAtMjYgMTU6MjE6MDIuNTU5CishTUVTU0FHRSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNiAxNToyMTowMi41NzEKKyFNRVNTQUdFIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgMCAyMDIxLTEwLTI2IDE2OjUzOjQ3Ljc0OQorIU1FU1NBR0UgVW5oYW5kbGVkIGV2ZW50IGxvb3AgZXhjZXB0aW9uCishU1RBQ0sgMAorb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbjogR3JhcGhpYyBpcyBkaXNwb3NlZAorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDU1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ0NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZS5nZXRCb3VuZHMoSW1hZ2UuamF2YToxMjYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmdldFRvdGFsU2l6ZShDTGFiZWwuamF2YToyNjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwub25QYWludChDTGFiZWwuamF2YTo0MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWwubGFtYmRhJDAoQ0xhYmVsLmphdmE6MTE5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXIuaGFuZGxlRXZlbnQoVHlwZWRMaXN0ZW5lci5qYXZhOjIzMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLldNX1BBSU5UKENvbXBvc2l0ZS5qYXZhOjE1NjEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODIyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NjUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLlZ0YmxDYWxsKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLm9sZS53aW4zMi5JT2xlSW5QbGFjZU9iamVjdC5JblBsYWNlRGVhY3RpdmF0ZShJT2xlSW5QbGFjZU9iamVjdC5qYXZhOjIxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5kZWFjdGl2YXRlSW5QbGFjZUNsaWVudChPbGVDbGllbnRTaXRlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5vbGUud2luMzIuT2xlQ2xpZW50U2l0ZS5vbkRpc3Bvc2UoT2xlQ2xpZW50U2l0ZS5qYXZhOjk1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuYWNjZXNzJDEoT2xlQ2xpZW50U2l0ZS5qYXZhOjk0NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUkMS5oYW5kbGVFdmVudChPbGVDbGllbnRTaXRlLmphdmE6MTI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50VGFibGUuc2VuZEV2ZW50KEV2ZW50VGFibGUuamF2YTo4NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnNlbmRFdmVudChEaXNwbGF5LmphdmE6NDExOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDc2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MDkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLnJlbGVhc2VDaGlsZHJlbihDYW52YXMuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMucmVsZWFzZUNoaWxkcmVuKERlY29yYXRpb25zLmphdmE6NzI4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLnJlbGVhc2VDaGlsZHJlbihTaGVsbC5qYXZhOjEzNDApCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5kaXNwb3NlKFdpZGdldC5qYXZhOjQyNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy5kaXNwb3NlKERlY29yYXRpb25zLmphdmE6NDA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmRpc3Bvc2UoU2hlbGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5kaXNwb3NlKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sLmphdmE6NTIxKQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmRpc3Bvc2VJbmZvcm1hdGlvbkNvbnRyb2woQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2xNYW5hZ2VyLmphdmE6MTMxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMzQpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzM3KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuZGlzcG9zZShUZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmphdmE6Mzc4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlci5oYW5kbGVEaXNwb3NlKFRleHRWaWV3ZXIuamF2YToxODc0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKFNvdXJjZVZpZXdlci5qYXZhOjc4OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25WaWV3ZXIuaGFuZGxlRGlzcG9zZShQcm9qZWN0aW9uVmlld2VyLmphdmE6MTI5NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoSmF2YVNvdXJjZVZpZXdlci5qYXZhOjUwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIkMi53aWRnZXREaXNwb3NlZChUZXh0Vmlld2VyLmphdmE6MTczMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5ub3RpZnlMaXN0ZW5lcnMoV2lkZ2V0LmphdmE6Nzc1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5oYW5kbGVEaXNwb3NlKFN0eWxlZFRleHQuamF2YTo1OTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5sYW1iZGEkMShTdHlsZWRUZXh0LmphdmE6NTczOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTczKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuamF2YToyNzApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuaGFyZENsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE5OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjEwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDEwLnJ1bihXb3JrYmVuY2guamF2YToxMTY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmJ1c3lDbG9zZShXb3JrYmVuY2guamF2YToxMTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkNChXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDAzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYwNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjQ5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQ2LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjUzMSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5XQldSZW5kZXJlci5sYW1iZGEkNChXQldSZW5kZXJlci5qYXZhOjYxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNoZWxsTGlzdGVuZXIkMi5zaGVsbENsb3NlZChTaGVsbExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmNsb3NlV2lkZ2V0KERlY29yYXRpb25zLmphdmE6MjgxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLldNX0NMT1NFKERlY29yYXRpb25zLmphdmE6MTU3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ3NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRpc3BhdGNoTWVzc2FnZShPUy5qYXZhOjIzMDMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCishU0VTU0lPTiAyMDIxLTEwLTI2IDE3OjM4OjQ3LjMyMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjYgMTc6Mzg6NTIuMDQwCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yNiAxNzozOTowMC4xMTcKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yNiAxNzozOTozMS45MzYKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTI2IDE3OjM5OjMzLjEwNworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjYgMTc6Mzk6NTAuMjM4CishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI2IDE4OjI1OjQ0LjkxMworIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjYgMTg6MjU6NDQuOTE3CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDAgMjAyMS0xMC0yNiAyMDo1MTo1My4yNTEKKyFNRVNTQUdFIFVuaGFuZGxlZCBldmVudCBsb29wIGV4Y2VwdGlvbgorIVNUQUNLIDAKK29yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb246IEdyYXBoaWMgaXMgZGlzcG9zZWQKKwlhdCBvcmcuZWNsaXBzZS5zd3QuU1dULmVycm9yKFNXVC5qYXZhOjQ1NTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LlNXVC5lcnJvcihTV1QuamF2YTo0NDY3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5TV1QuZXJyb3IoU1dULmphdmE6NDQzOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UuZ2V0Qm91bmRzKEltYWdlLmphdmE6MTI2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbC5nZXRUb3RhbFNpemUoQ0xhYmVsLmphdmE6MjY2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLm9uUGFpbnQoQ0xhYmVsLmphdmE6NDI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsLmxhbWJkYSQwKENMYWJlbC5qYXZhOjExOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToyMzEpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5XTV9QQUlOVChDb21wb3NpdGUuamF2YToxNTYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDgyMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzY1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5WdGJsQ2FsbChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC5vbGUud2luMzIuSU9sZUluUGxhY2VPYmplY3QuSW5QbGFjZURlYWN0aXZhdGUoSU9sZUluUGxhY2VPYmplY3QuamF2YToyMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUuZGVhY3RpdmF0ZUluUGxhY2VDbGllbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qub2xlLndpbjMyLk9sZUNsaWVudFNpdGUub25EaXNwb3NlKE9sZUNsaWVudFNpdGUuamF2YTo5NTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlLmFjY2VzcyQxKE9sZUNsaWVudFNpdGUuamF2YTo5NDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0Lm9sZS53aW4zMi5PbGVDbGllbnRTaXRlJDEuaGFuZGxlRXZlbnQoT2xlQ2xpZW50U2l0ZS5qYXZhOjEyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLnJlbGVhc2VDaGlsZHJlbihEZWNvcmF0aW9ucy5qYXZhOjcyOCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5yZWxlYXNlQ2hpbGRyZW4oU2hlbGwuamF2YToxMzQwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMuZGlzcG9zZShEZWNvcmF0aW9ucy5qYXZhOjQwNSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC5kaXNwb3NlKFNoZWxsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RJbmZvcm1hdGlvbkNvbnRyb2wuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbC5qYXZhOjUyMSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5kaXNwb3NlSW5mb3JtYXRpb25Db250cm9sKEFic3RyYWN0SW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjEzMTkpCisJYXQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5BYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuamF2YToxMzM0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQWJzdHJhY3RIb3ZlckluZm9ybWF0aW9uQ29udHJvbE1hbmFnZXIuZGlzcG9zZShBYnN0cmFjdEhvdmVySW5mb3JtYXRpb25Db250cm9sTWFuYWdlci5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJIb3Zlck1hbmFnZXIuZGlzcG9zZShUZXh0Vmlld2VySG92ZXJNYW5hZ2VyLmphdmE6Mzc4KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlci5oYW5kbGVEaXNwb3NlKFRleHRWaWV3ZXIuamF2YToxODc0KQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlci5oYW5kbGVEaXNwb3NlKFNvdXJjZVZpZXdlci5qYXZhOjc4OCkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25WaWV3ZXIuaGFuZGxlRGlzcG9zZShQcm9qZWN0aW9uVmlld2VyLmphdmE6MTI5NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU291cmNlVmlld2VyLmhhbmRsZURpc3Bvc2UoSmF2YVNvdXJjZVZpZXdlci5qYXZhOjUwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXIkMi53aWRnZXREaXNwb3NlZChUZXh0Vmlld2VyLmphdmE6MTczMSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UeXBlZExpc3RlbmVyLmhhbmRsZUV2ZW50KFR5cGVkTGlzdGVuZXIuamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5ub3RpZnlMaXN0ZW5lcnMoV2lkZ2V0LmphdmE6Nzc1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5oYW5kbGVEaXNwb3NlKFN0eWxlZFRleHQuamF2YTo1OTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dC5sYW1iZGEkMShTdHlsZWRUZXh0LmphdmE6NTczOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudFRhYmxlLnNlbmRFdmVudChFdmVudFRhYmxlLmphdmE6ODYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA3NikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODA5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy5yZWxlYXNlQ2hpbGRyZW4oQ2FudmFzLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUucmVsZWFzZUNoaWxkcmVuKENvbXBvc2l0ZS5qYXZhOjkyOSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQucmVsZWFzZShXaWRnZXQuamF2YTo4MTIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLnJlbGVhc2VDaGlsZHJlbihDb21wb3NpdGUuamF2YTo5MjkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnJlbGVhc2UoV2lkZ2V0LmphdmE6ODEyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZS5yZWxlYXNlQ2hpbGRyZW4oQ29tcG9zaXRlLmphdmE6OTI5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5yZWxlYXNlKFdpZGdldC5qYXZhOjgxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuZGlzcG9zZShXaWRnZXQuamF2YTo0MjYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuU1dUUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoU1dUUGFydFJlbmRlcmVyLmphdmE6MTczKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkNvbnRyaWJ1dGVkUGFydFJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoQ29udHJpYnV0ZWRQYXJ0UmVuZGVyZXIuamF2YToyNzApCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjk1NSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnJlbmRlcmVycy5zd3QuRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmRpc3Bvc2VXaWRnZXQoRWxlbWVudFJlZmVyZW5jZVJlbmRlcmVyLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5NTUpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTEwKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuc2FmZVJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6OTE3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5hY2Nlc3MkMShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODgzKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ0LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODc4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJlbW92ZUd1aShQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6ODYyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5zYWZlUmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo5MTcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLmFjY2VzcyQxKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4ODMpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDQucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NzgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucmVtb3ZlR3VpKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YTo4NjIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnNhZmVSZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjkxNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUuYWNjZXNzJDEoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg4MykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNC5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg3OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5yZW1vdmVHdWkoUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjg2MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuaGFyZENsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE5OTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmJ1c3lDbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjEwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5hY2Nlc3MkMTgoV29ya2JlbmNoV2luZG93LmphdmE6MTU1MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3ckMTEucnVuKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE2MzUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDEwLnJ1bihXb3JrYmVuY2guamF2YToxMTY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmJ1c3lDbG9zZShXb3JrYmVuY2guamF2YToxMTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkNChXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDMwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jbG9zZShXb3JrYmVuY2guamF2YToxNDAzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5idXN5Q2xvc2UoV29ya2JlbmNoV2luZG93LmphdmE6MTYwNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hXaW5kb3cuYWNjZXNzJDE4KFdvcmtiZW5jaFdpbmRvdy5qYXZhOjE1NTIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93JDExLnJ1bihXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvci5zaG93V2hpbGUoQnVzeUluZGljYXRvci5qYXZhOjcxKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjM1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy5jbG9zZShXb3JrYmVuY2hXaW5kb3cuamF2YToxNjQ5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdyQ2LmNsb3NlKFdvcmtiZW5jaFdpbmRvdy5qYXZhOjUzMSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5XQldSZW5kZXJlci5sYW1iZGEkNChXQldSZW5kZXJlci5qYXZhOjYxMikKKwlhdCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNoZWxsTGlzdGVuZXIkMi5zaGVsbENsb3NlZChTaGVsbExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lci5oYW5kbGVFdmVudChUeXBlZExpc3RlbmVyLmphdmE6OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc2VuZEV2ZW50KERpc3BsYXkuamF2YTo0MTE4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldC5zZW5kRXZlbnQoV2lkZ2V0LmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNzYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0LnNlbmRFdmVudChXaWRnZXQuamF2YToxMDYxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLmNsb3NlV2lkZ2V0KERlY29yYXRpb25zLmphdmE6MjgxKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLldNX0NMT1NFKERlY29yYXRpb25zLmphdmE6MTU3MSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLndpbmRvd1Byb2MoQ29udHJvbC5qYXZhOjQ3NjcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzLndpbmRvd1Byb2MoQ2FudmFzLmphdmE6MzQ1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRlY29yYXRpb25zLndpbmRvd1Byb2MoRGVjb3JhdGlvbnMuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLndpbmRvd1Byb2MoU2hlbGwuamF2YToyMTU5KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkud2luZG93UHJvYyhEaXNwbGF5LmphdmE6NDc1NykKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvY1coTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5zd3QuaW50ZXJuYWwud2luMzIuT1MuRGVmV2luZG93UHJvYyhPUy5qYXZhOjIyOTgpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwuY2FsbFdpbmRvd1Byb2MoU2hlbGwuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbC53aW5kb3dQcm9jKENvbnRyb2wuamF2YTo0ODYzKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhcy53aW5kb3dQcm9jKENhbnZhcy5qYXZhOjM0NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EZWNvcmF0aW9ucy53aW5kb3dQcm9jKERlY29yYXRpb25zLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbC53aW5kb3dQcm9jKFNoZWxsLmphdmE6MjE1OSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LndpbmRvd1Byb2MoRGlzcGxheS5qYXZhOjQ3NTcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2NXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRlZldpbmRvd1Byb2MoT1MuamF2YToyMjk4KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsLmNhbGxXaW5kb3dQcm9jKFNoZWxsLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wud2luZG93UHJvYyhDb250cm9sLmphdmE6NDg2MykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXMud2luZG93UHJvYyhDYW52YXMuamF2YTozNDUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGVjb3JhdGlvbnMud2luZG93UHJvYyhEZWNvcmF0aW9ucy5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwud2luZG93UHJvYyhTaGVsbC5qYXZhOjIxNTkpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS53aW5kb3dQcm9jKERpc3BsYXkuamF2YTo0NzU3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC53aW4zMi5PUy5EaXNwYXRjaE1lc3NhZ2VXKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLndpbjMyLk9TLkRpc3BhdGNoTWVzc2FnZShPUy5qYXZhOjIzMDMpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzIpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCishU0VTU0lPTiAyMDIxLTEwLTI3IDA4OjI2OjM4LjI1NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTAtMjcgMDg6MjY6NDkuNDk4CishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMC0yNyAwODoyODoxOS41MDAKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMC0yNyAwODoyOToxMS41NDkKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUgMiAxNyAyMDIxLTEwLTI3IDA4OjI5OjEzLjMxMworIU1FU1NBR0UgU2VydmVyIOKAmG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlcuKAmSBmYWlsZWQgd2l0aCBleGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkLiA7IHZlcnNpb246IDIuMC43LnYyMDE3MDkwNi0xMzI3CishU1RBQ0sgMAorY29tLmdvb2dsZS5nc29uLkpzb25TeW50YXhFeGNlcHRpb246IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIyNCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODg4KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4NTMpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjgwMikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIuanNvbi5Kc29uLmRlc2VyaWFsaXplKEpzb24uamF2YTo5MSkKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5JTy5yZWZyZXNoQ29uZmlndXJhdGlvbihJTy5qYXZhOjY2KQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLlNlcnZlckNvbm5lY3Rpb24uc3RhcnRVcChTZXJ2ZXJDb25uZWN0aW9uLmphdmE6MTI0KQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdElkbGVTZXJ2aWNlJERlbGVnYXRlU2VydmljZSQxLnJ1bihBYnN0cmFjdElkbGVTZXJ2aWNlLmphdmE6NjIpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkNhbGxhYmxlcyQ0LnJ1bihDYWxsYWJsZXMuamF2YToxMjIpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5zdHJlYW0uSnNvblJlYWRlci5iZWdpbk9iamVjdChKc29uUmVhZGVyLmphdmE6Mzg1KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMTMpCisJLi4uIDkgbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkgNCAwIDIwMjEtMTAtMjcgMDg6Mjk6MjUuMzIzCishTUVTU0FHRSBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorIVNUQUNLIDAKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldEtub3duUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo0ODApCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5DYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIkQXJ0aWZhY3QuZ2V0S25vd25SZXBvc2l0b3JpZXMoQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjIzKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmNvcmUuUDJVdGlsLmdldEtub3duUmVwb3NpdG9yaWVzKFAyVXRpbC5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnAyLmltcGwuUDJUYXNrSW1wbC5pc05lZWRlZChQMlRhc2tJbXBsLmphdmE6NzAxKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmludGVybmFsLmNvcmUuU2V0dXBUYXNrUGVyZm9ybWVyLmluaXROZWVkZWRTZXR1cFRhc2tzKFNldHVwVGFza1BlcmZvcm1lci5qYXZhOjIyNzMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5wZXJmb3JtU3RhcnR1cChTZXR1cFVJUGx1Z2luLmphdmE6Njc5KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4uYWNjZXNzJDUoU2V0dXBVSVBsdWdpbi5qYXZhOjQxNSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luJDEkMS5ydW4oU2V0dXBVSVBsdWdpbi5qYXZhOjI1MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyIDIgMCAyMDIxLTEwLTI3IDA4OjM5OjMxLjkwMQorIU1FU1NBR0UgRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCishU1RBQ0sgMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApCisJLi4uIDggbW9yZQorCishRU5UUlkgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AgMSAwIDIwMjEtMTAtMjcgMDg6Mzk6MzEuOTA1CishTUVTU0FHRSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbW9kZWwgcmVwb3NpdG9yaWVzLiBBcmUgeW91IG9mZmxpbmU/CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yNyAxODoyOTowNy4zODMKKyFNRVNTQUdFIFVua25vd24gb3IgdW5zdXBwb3J0ZWQgc291cmNlIGxvY2F0b3Igb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmxhdW5jaGluZy5zb3VyY2Vsb29rdXAuYWR2YW5jZWQuQWR2YW5jZWRTb3VyY2VMb29rdXBEaXJlY3RvcgorIVNFU1NJT04gMjAyMS0xMC0yOCAwNzoyMDoxMC4yMDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTI4IDA3OjIwOjIzLjU0OQorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjggMDc6MjA6NDcuNjI4CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjggMDc6MjE6NDIuNzI3CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0yOCAwNzoyMTo0OS45MjEKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTI4IDA3OjIyOjA1LjE0NworIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yOCAwNzozOToyOS40NTkKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTI4IDA3OjM5OjI5LjQ2MworIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0yOCAxMzoxNToyMi44NzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTI4IDEzOjE1OjI3LjA0MgorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjggMTM6MTU6MzUuOTEyCishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjggMTM6MTY6MDMuMzY0CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0yOCAxMzoxNjowNS4xOTQKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTI4IDEzOjE2OjIwLjIwOAorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yOCAxNTo1NDowMS4xODgKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTI4IDE1OjU0OjAxLjE5MgorIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0yOSAwODozNDozNC44NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTI5IDA4OjM0OjQ2Ljg0NAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjkgMDg6MzY6MDIuNzY0CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjkgMDg6MzY6NDcuOTcyCishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMC0yOSAwODozNjo1My44MjEKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTI5IDA4OjM3OjA2LjQyMAorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlciAyIDAgMjAyMS0xMC0yOSAwOTozMDowNC41MjAKKyFNRVNTQUdFIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorIVNUQUNLIDAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkKKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKQorCS4uLiA4IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwIDEgMCAyMDIxLTEwLTI5IDA5OjMwOjA0LjUyMworIU1FU1NBR0Ugb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gdGhlIG1vZGVsIHJlcG9zaXRvcmllcy4gQXJlIHlvdSBvZmZsaW5lPworIVNFU1NJT04gMjAyMS0xMC0yOSAxNzo0ODoxMy40MjMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTEwLTI5IDE3OjQ4OjI0LjM1OAorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTAtMjkgMTc6NDk6NTcuMTQ4CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTAtMjkgMTc6NTA6MjcuMzM0CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTAtMjkgMTc6NTA6MjkuNjU4CishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTAwNW1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTY6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE6IERlY29yYXRpb24gQ2FsY3VsYXRpb24sNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC4KKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBVbmFibGUgdG8gYWNxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIGxvY2sgZm9yIHRoZSBtb2R1bGU6IG9zZ2kuaWRlbnRpdHk7IHR5cGU9Im9zZ2kuYnVuZGxlIjsgdmVyc2lvbjpWZXJzaW9uPSIxLjkuMC4yMDE4MDYwNi0yMDM2Ijsgb3NnaS5pZGVudGl0eT0ib3JnLmVjbGlwc2UubTJlLmpkdCI7IHNpbmdsZXRvbjo9InRydWUiIFtpZD0yNjVdIFNUQVJURUQgW1NUQVJURURdCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzcpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMzUgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmlzT25DbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyNjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5nZXRPdmVybGF5KEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6NDUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmRlY29yYXRlKEJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyJExpZ2h0d2VpZ2h0UnVubmFibGUucnVuKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM3NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5nZXREZWNvcmF0aW9ucyhMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEuZW5zdXJlUmVzdWx0Q2FjaGVkKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozNDcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5EZWNvcmF0aW9uU2NoZWR1bGVyJDEucnVuKERlY29yYXRpb25TY2hlZHVsZXIuamF2YTozMTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTAtMjkgMTc6NTA6MzAuMDQ5CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTEwLTI5IDE3OjUwOjMyLjU5OAorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEwOiBJbml0aWFsaXppbmcgSmF2YSBUb29saW5nLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDAxbXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTA6IEluaXRpYWxpemluZyBKYXZhIFRvb2xpbmcsNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC4KKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBVbmFibGUgdG8gYWNxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIGxvY2sgZm9yIHRoZSBtb2R1bGU6IG9zZ2kuaWRlbnRpdHk7IHR5cGU9Im9zZ2kuYnVuZGxlIjsgdmVyc2lvbjpWZXJzaW9uPSIxLjkuMC4yMDE4MDYwNi0yMDM2Ijsgb3NnaS5pZGVudGl0eT0ib3JnLmVjbGlwc2UubTJlLmpkdCI7IHNpbmdsZXRvbjo9InRydWUiIFtpZD0yNjVdIFNUQVJURUQgW1NUQVJURURdCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzcpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMjcgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTEwLTI5IDE3OjUwOjMzLjM5NgorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTc6IFVwZGF0ZSBkeW5hbWljIEphdmEgc291cmNlcyB3b3JraW5nIHNldHMsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMDNtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci02OiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgdG8gZmluaXNoIHN0YXJ0aW5nIGJ1bmRsZSAib3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2IFsyNjVdIi4gVG8gYXZvaWQgZGVhZGxvY2ssIHRocmVhZCAiVGhyZWFkW1dvcmtlci03OiBVcGRhdGUgZHluYW1pYyBKYXZhIHNvdXJjZXMgd29ya2luZyBzZXRzLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuYnVpbGRTdHJ1Y3R1cmUoSmF2YVByb2plY3QuamF2YTo0NzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuT3BlbmFibGUuZ2VuZXJhdGVJbmZvcyhPcGVuYWJsZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5vcGVuV2hlbkNsb3NlZChKYXZhRWxlbWVudC5qYXZhOjU5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMyMykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRDaGlsZHJlbihKYXZhRWxlbWVudC5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRQYWNrYWdlRnJhZ21lbnRSb290cyhKYXZhUHJvamVjdC5qYXZhOjIyMzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE5NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyJDEucnVuKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNjIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMzkgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5idWlsZFN0cnVjdHVyZShKYXZhUHJvamVjdC5qYXZhOjQ3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5PcGVuYWJsZS5nZW5lcmF0ZUluZm9zKE9wZW5hYmxlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50Lm9wZW5XaGVuQ2xvc2VkKEphdmFFbGVtZW50LmphdmE6NTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzIzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzA5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldENoaWxkcmVuKEphdmFFbGVtZW50LmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKEphdmFQcm9qZWN0LmphdmE6MjIzNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTk0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIkMS5ydW4oRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE2MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTAtMjkgMTc6NTA6MzQuNjc5CishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoSGVscGVycyIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci0xOiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDA1bXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aEhlbHBlcnMiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDI5IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkud29ya2JlbmNoIDQgMiAyMDIxLTEwLTI5IDE3OjUwOjM1LjI4NQorIU1FU1NBR0UgUHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBpbnZva2luZyBjb2RlIGZyb20gcGx1Zy1pbjogIm9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmdldEJ1aWxkUGF0aE1hbmFnZXIoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjgwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpIDQgNCAyMDIxLTEwLTI5IDE3OjUwOjM1LjMwNworIU1FU1NBR0UgRXhjZXB0aW9uIGluIERlY29yYXRvci4gVGhlICdKYXZhIEJ1aWxkIFBhdGggSW5kaWNhdG9yJyBkZWNvcmF0b3Igd2lsbCBiZSBkaXNhYmxlZC4KKyFTVUJFTlRSWSAxIG9yZy5lY2xpcHNlLnVpIDQgNCAyMDIxLTEwLTI5IDE3OjUwOjM1LjMwNworIU1FU1NBR0UgamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmdldEJ1aWxkUGF0aE1hbmFnZXIoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjgwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIDQgMiAyMDIxLTEwLTI5IDE3OjUwOjM1Ljc2MAorIU1FU1NBR0UgUHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBpbnZva2luZyBjb2RlIGZyb20gcGx1Zy1pbjogIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi4KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMjgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5DbGFzc3BhdGhDaGFuZ2UuZ2VuZXJhdGVEZWx0YShDbGFzc3BhdGhDaGFuZ2UuamF2YToyNDApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRGVsdGFQcm9jZXNzb3IucmVzb3VyY2VDaGFuZ2VkKERlbHRhUHJvY2Vzc29yLmphdmE6MjEwNykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EZWx0YVByb2Nlc3NpbmdTdGF0ZS5yZXNvdXJjZUNoYW5nZWQoRGVsdGFQcm9jZXNzaW5nU3RhdGUuamF2YTo0NzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlciQxLnJ1bihOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6Mjk3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlci5ub3RpZnkoTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjI4NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyLmJyb2FkY2FzdENoYW5nZXMoTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjE1MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UuYnJvYWRjYXN0UG9zdENoYW5nZShXb3Jrc3BhY2UuamF2YTozNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLmVuZE9wZXJhdGlvbihXb3Jrc3BhY2UuamF2YToxNDk5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMwMikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyJE5vdGlmeUpvYi5ydW4oTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjQxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIDQgMiAyMDIxLTEwLTI5IDE3OjUwOjM1LjgyOAorIU1FU1NBR0UgUHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBpbnZva2luZyBjb2RlIGZyb20gcGx1Zy1pbjogIm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmdldERlcGVuZGVudFByb2plY3RzKER5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5qYXZhOjM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5jb21wdXRlRHluYW1pY1JlZmVyZW5jZXNGb3JQcm9qZWN0KFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjk0OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsQnVpbGRDb25maWdSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdC5nZXRSZWZlcmVuY2VkUHJvamVjdHMoUHJvamVjdC5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uYnVpbGRDb25uZWN0ZWRDb21wb25lbnRzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YTo3OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uY29tcHV0ZVJlbGF0ZWQoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjE5OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uZ2V0U2VsZWN0ZWRSZXNvdXJjZXMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjIxNikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbklzT2ZUeXBlKFNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MjQwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VSZXNvdXJjZUFjdGlvbi51cGRhdGVTZWxlY3Rpb24oQ2xvc2VSZXNvdXJjZUFjdGlvbi5qYXZhOjIyMikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25DaGFuZ2VkKEJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIudXBkYXRlQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjI4NikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuZmlsbEFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YTo4OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZSQzLnJ1bihOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UuZmlsbEFjdGlvbkJhcnMoTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iJDEucnVuKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IucnVuSW5VSVRocmVhZChDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6NzgpCisJYXQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2IubGFtYmRhJDAoVUlKb2IuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5jb3JlLmpvYnMgNCAyIDIwMjEtMTAtMjkgMTc6NTA6MzUuODMxCishTUVTU0FHRSBBbiBpbnRlcm5hbCBlcnJvciBvY2N1cnJlZCBkdXJpbmc6ICJJbml0aWFsaXppbmcgSmF2YSBUb29saW5nIi4KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IgNCAwIDIwMjEtMTAtMjkgMTc6NTA6MzUuOTMyCishTUVTU0FHRSBqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuZ2V0RGVwZW5kZW50UHJvamVjdHMoRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmphdmE6MzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmNvbXB1dGVEeW5hbWljUmVmZXJlbmNlc0ZvclByb2plY3QoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6OTQ5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5nZXRBbGxCdWlsZENvbmZpZ1JlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5nZXRBbGxSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjIyMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0LmdldFJlZmVyZW5jZWRQcm9qZWN0cyhQcm9qZWN0LmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5idWlsZENvbm5lY3RlZENvbXBvbmVudHMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjc5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5jb21wdXRlUmVsYXRlZChDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6MTk5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5nZXRTZWxlY3RlZFJlc291cmNlcyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6MjE2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uSXNPZlR5cGUoU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToyNDApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVJlc291cmNlQWN0aW9uLnVwZGF0ZVNlbGVjdGlvbihDbG9zZVJlc291cmNlQWN0aW9uLmphdmE6MjIyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbkNoYW5nZWQoQmFzZVNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MTI0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5SZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci51cGRhdGVBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6Mjg2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLm5hdmlnYXRvci5yZXNvdXJjZXMuYWN0aW9ucy5SZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5maWxsQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjg5KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlJDMucnVuKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZS5maWxsQWN0aW9uQmFycyhOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IkMS5ydW4oQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYi5ydW5JblVJVGhyZWFkKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYi5sYW1iZGEkMChVSUpvYi5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlJ1bm5hYmxlTG9jay5ydW4oUnVubmFibGVMb2NrLmphdmE6MzcpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnJ1bkFzeW5jTWVzc2FnZXMoU3luY2hyb25pemVyLmphdmE6MTgyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucnVuQXN5bmNNZXNzYWdlcyhEaXNwbGF5LmphdmE6MzkwNikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJlYWRBbmREaXNwYXRjaChEaXNwbGF5LmphdmE6MzUzNykKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjEwNTkpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLkU0V29ya2JlbmNoLmNyZWF0ZUFuZFJ1blVJKEU0V29ya2JlbmNoLmphdmE6MTUzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpIDQgMCAyMDIxLTEwLTI5IDE3OjUwOjQzLjcxNAorIU1FU1NBR0UgUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKyFTVEFDSyAwCitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRLbm93blJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NDgwKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuQ2FjaGluZ1JlcG9zaXRvcnlNYW5hZ2VyJEFydGlmYWN0LmdldEtub3duUmVwb3NpdG9yaWVzKENhY2hpbmdSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjYyMykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5jb3JlLlAyVXRpbC5nZXRLbm93blJlcG9zaXRvcmllcyhQMlV0aWwuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5wMi5pbXBsLlAyVGFza0ltcGwuaXNOZWVkZWQoUDJUYXNrSW1wbC5qYXZhOjcwMSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5pbnRlcm5hbC5jb3JlLlNldHVwVGFza1BlcmZvcm1lci5pbml0TmVlZGVkU2V0dXBUYXNrcyhTZXR1cFRhc2tQZXJmb3JtZXIuamF2YToyMjczKQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4ucGVyZm9ybVN0YXJ0dXAoU2V0dXBVSVBsdWdpbi5qYXZhOjY3OSkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLmFjY2VzcyQ1KFNldHVwVUlQbHVnaW4uamF2YTo0MTUpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbiQxJDEucnVuKFNldHVwVUlQbHVnaW4uamF2YToyNTIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCishU0VTU0lPTiAyMDIxLTExLTAzIDA5OjE2OjU5LjI3OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCishRU5UUlkgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMgNCAwIDIwMjEtMTEtMDMgMDk6MTc6MTEuNTIwCishTUVTU0FHRSBGcmFtZXdvcmtFdmVudCBFUlJPUgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IEV4Y2VwdGlvbiBpbiBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoKSBvZiBidW5kbGUgb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo4MDApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJLi4uIDEyIG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuYmFzaWNHZXRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxODEpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NjQ5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDcpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLmluaXRpYWxpemVNZXRhZGF0YVJlcG9zaXRvcnkoUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjU5KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkRyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuPGluaXQ+KERyb3BpbnNSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo4MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iud2F0Y2hEcm9waW5zKEFjdGl2YXRvci5qYXZhOjUxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MTcxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjgyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY2MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kb0NvbnRhaW5lclN0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTYyNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjE1NTUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlci5kaXNwYXRjaEV2ZW50KEV2ZW50TWFuYWdlci5qYXZhOjIzMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuKEV2ZW50TWFuYWdlci5qYXZhOjM0MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQuY29yZSAyIDAgMjAyMS0xMS0wMyAwOToxNzozNC4wNzMKKyFNRVNTQUdFIEJ1aWx0aW4gTEZTIHN1cHBvcnQgbm90IHByZXNlbnQvZGV0ZWN0ZWQKKyFTVEFDSyAwCitqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogb3JnLmVjbGlwc2UuamdpdC5sZnMuQnVpbHRpbkxGUyBjYW5ub3QgYmUgZm91bmQgYnkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlXzUuMC4wLjIwMTgwNjEzMTU1MC1yCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjUwOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnJlZ2lzdGVyQnVpbHRpbkxGUyhBY3RpdmF0b3IuamF2YToyNzkpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToyMTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuc291cmNlcy5TaW5nbGVTb3VyY2VQYWNrYWdlLmxvYWRDbGFzcyhTaW5nbGVTb3VyY2VQYWNrYWdlLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvciRSZXBvc2l0b3J5Q2hhbmdlU2Nhbm5lci48aW5pdD4oQWN0aXZhdG9yLmphdmE6OTIxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnNldHVwUmVwb0NoYW5nZVNjYW5uZXIoQWN0aXZhdG9yLmphdmE6MTAzNCkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmdldFNvdXJjZVByb3ZpZGVycyhXb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuamF2YToxNzQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuc2VydmljZXMuU291cmNlUHJvdmlkZXJTZXJ2aWNlLnJlYWRSZWdpc3RyeShTb3VyY2VQcm92aWRlclNlcnZpY2UuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoJDM0LnJ1bldpdGhFeGNlcHRpb24oV29ya2JlbmNoLmphdmE6MjM3OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nJFN0YXJ0dXBSdW5uYWJsZS5ydW4oU3RhcnR1cFRocmVhZGluZy5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5zeW5jRXhlYyhTeW5jaHJvbml6ZXIuamF2YToyMzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMoVUlTeW5jaHJvbml6ZXIuamF2YToxNDQpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zeW5jRXhlYyhEaXNwbGF5LmphdmE6NDU2NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFydHVwVGhyZWFkaW5nLnJ1bldpdGhvdXRFeGNlcHRpb25zKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdGlhbGl6ZURlZmF1bHRTZXJ2aWNlcyhXb3JrYmVuY2guamF2YToyMzczKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0KFdvcmtiZW5jaC5qYXZhOjE2NTQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLnJ1blVJKFdvcmtiZW5jaC5qYXZhOjI4NTkpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY1NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC51aSAyIDAgMjAyMS0xMS0wMyAwOToxODoxMS41MTgKKyFNRVNTQUdFIFdhcm5pbmc6IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBIT01FIGlzIG5vdCBzZXQuIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgR2l0Cit1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGFuZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gc3RvcmUgcmVwb3NpdG9yaWVzOiAnQzpcVXNlcnNcRnJhbmNrJy4gSWYgdGhpcyBpcworbm90IGNvcnJlY3QgcGxlYXNlIHNldCB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgcmVzdGFydCBFY2xpcHNlLiBPdGhlcndpc2UgR2l0IGZvciBXaW5kb3dzIGFuZAorRUdpdCBtaWdodCBiZWhhdmUgZGlmZmVyZW50bHkgc2luY2UgdGhleSBzZWUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK1RoaXMgd2FybmluZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIG9uIHRoZSBUZWFtID4gR2l0ID4gQ29uZmlybWF0aW9ucyBhbmQgV2FybmluZ3MgcHJlZmVyZW5jZSBwYWdlLgorCishRU5UUlkgb3JnLmVjbGlwc2Uub3NnaSAyIDAgMjAyMS0xMS0wMyAwOToxODoxNC42OTcKKyFNRVNTQUdFIFdoaWxlIGxvYWRpbmcgY2xhc3MgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci02OiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDIxbXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNTogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgorIVNUQUNLIDAKK29yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb246IFVuYWJsZSB0byBhY3F1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgbG9jayBmb3IgdGhlIG1vZHVsZTogb3NnaS5pZGVudGl0eTsgdHlwZT0ib3NnaS5idW5kbGUiOyB2ZXJzaW9uOlZlcnNpb249IjEuOS4wLjIwMTgwNjA2LTIwMzYiOyBvc2dpLmlkZW50aXR5PSJvcmcuZWNsaXBzZS5tMmUuamR0Ijsgc2luZ2xldG9uOj0idHJ1ZSIgW2lkPTI2NV0gU1RBUlRFRCBbU1RBUlRFRF0KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNykKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jb21wdXRlQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjY2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCS4uLiAzNSBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jb21wdXRlQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjY2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDMgMDk6MTg6MTcuMTk2CishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTogSW5pdGlhbGl6aW5nIEphdmEgVG9vbGluZyw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTAyOG1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTU6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0byBmaW5pc2ggc3RhcnRpbmcgYnVuZGxlICJvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYgWzI2NV0iLiBUbyBhdm9pZCBkZWFkbG9jaywgdGhyZWFkICJUaHJlYWRbV29ya2VyLTE6IEluaXRpYWxpemluZyBKYXZhIFRvb2xpbmcsNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC4KKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBVbmFibGUgdG8gYWNxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIGxvY2sgZm9yIHRoZSBtb2R1bGU6IG9zZ2kuaWRlbnRpdHk7IHR5cGU9Im9zZ2kuYnVuZGxlIjsgdmVyc2lvbjpWZXJzaW9uPSIxLjkuMC4yMDE4MDYwNi0yMDM2Ijsgb3NnaS5pZGVudGl0eT0ib3JnLmVjbGlwc2UubTJlLmpkdCI7IHNpbmdsZXRvbjo9InRydWUiIFtpZD0yNjVdIFNUQVJURUQgW1NUQVJURURdCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzcpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMjcgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vc2dpIDIgMCAyMDIxLTExLTAzIDA5OjE4OjE4Ljg3NAorIU1FU1NBR0UgV2hpbGUgbG9hZGluZyBjbGFzcyAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTI6IFVwZGF0ZSBkeW5hbWljIEphdmEgc291cmNlcyB3b3JraW5nIHNldHMsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMTRtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci01OiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgdG8gZmluaXNoIHN0YXJ0aW5nIGJ1bmRsZSAib3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2IFsyNjVdIi4gVG8gYXZvaWQgZGVhZGxvY2ssIHRocmVhZCAiVGhyZWFkW1dvcmtlci0yOiBVcGRhdGUgZHluYW1pYyBKYXZhIHNvdXJjZXMgd29ya2luZyBzZXRzLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuYnVpbGRTdHJ1Y3R1cmUoSmF2YVByb2plY3QuamF2YTo0NzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuT3BlbmFibGUuZ2VuZXJhdGVJbmZvcyhPcGVuYWJsZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5vcGVuV2hlbkNsb3NlZChKYXZhRWxlbWVudC5qYXZhOjU5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMyMykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRFbGVtZW50SW5mbyhKYXZhRWxlbWVudC5qYXZhOjMwOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhRWxlbWVudC5nZXRDaGlsZHJlbihKYXZhRWxlbWVudC5qYXZhOjI2NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRQYWNrYWdlRnJhZ21lbnRSb290cyhKYXZhUHJvamVjdC5qYXZhOjIyMzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE5NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyJDEucnVuKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNjIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMzkgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5idWlsZFN0cnVjdHVyZShKYXZhUHJvamVjdC5qYXZhOjQ3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5PcGVuYWJsZS5nZW5lcmF0ZUluZm9zKE9wZW5hYmxlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50Lm9wZW5XaGVuQ2xvc2VkKEphdmFFbGVtZW50LmphdmE6NTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzIzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzA5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldENoaWxkcmVuKEphdmFFbGVtZW50LmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKEphdmFQcm9qZWN0LmphdmE6MjIzNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTk0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIkMS5ydW4oRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE2MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMS0wMyAwOToxODoxOS41NDQKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDMgMDk6MTg6MTkuODIxCishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoSGVscGVycyIsIHRocmVhZCAiVGhyZWFkW1dvcmtlci02OiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRpbWVkIG91dCB3YWl0aW5nICg1MDAybXMpIGZvciB0aHJlYWQgIlRocmVhZFtXb3JrZXItNTogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItNjogRGVjb3JhdGlvbiBDYWxjdWxhdGlvbiw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aEhlbHBlcnMiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorQ2F1c2VkIGJ5OiBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJLi4uIDI5IG1vcmUKK1Jvb3QgZXhjZXB0aW9uOgoramF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkud29ya2JlbmNoIDQgMiAyMDIxLTExLTAzIDA5OjE4OjI5LjM3MAorIU1FU1NBR0UgUHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBpbnZva2luZyBjb2RlIGZyb20gcGx1Zy1pbjogIm9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5pc09uQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjY0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZ2V0T3ZlcmxheShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjQ1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5CdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5kZWNvcmF0ZShCdWlsZHBhdGhJbmRpY2F0b3JMYWJlbERlY29yYXRvci5qYXZhOjMyKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JEZWZpbml0aW9uLmRlY29yYXRlKExpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlciRMaWdodHdlaWdodFJ1bm5hYmxlLnJ1bihMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuamF2YTozNzcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZ2V0RGVjb3JhdGlvbnMoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MzU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLmVuc3VyZVJlc3VsdENhY2hlZChEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzQ3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuRGVjb3JhdGlvblNjaGVkdWxlciQxLnJ1bihEZWNvcmF0aW9uU2NoZWR1bGVyLmphdmE6MzEwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMgNCAyIDIwMjEtMTEtMDMgMDk6MTg6MjkuMzcyCishTUVTU0FHRSBQcm9ibGVtcyBvY2N1cnJlZCB3aGVuIGludm9raW5nIGNvZGUgZnJvbSBwbHVnLWluOiAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEyOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkNsYXNzcGF0aENoYW5nZS5nZW5lcmF0ZURlbHRhKENsYXNzcGF0aENoYW5nZS5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5EZWx0YVByb2Nlc3Nvci5yZXNvdXJjZUNoYW5nZWQoRGVsdGFQcm9jZXNzb3IuamF2YToyMTA3KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkRlbHRhUHJvY2Vzc2luZ1N0YXRlLnJlc291cmNlQ2hhbmdlZChEZWx0YVByb2Nlc3NpbmdTdGF0ZS5qYXZhOjQ3NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyJDEucnVuKE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YToyOTcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmV2ZW50cy5Ob3RpZmljYXRpb25NYW5hZ2VyLm5vdGlmeShOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6Mjg3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIuYnJvYWRjYXN0Q2hhbmdlcyhOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6MTUwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5icm9hZGNhc3RQb3N0Q2hhbmdlKFdvcmtzcGFjZS5qYXZhOjM3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UuZW5kT3BlcmF0aW9uKFdvcmtzcGFjZS5qYXZhOjE0OTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzAyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIkTm90aWZ5Sm9iLnJ1bihOb3RpZmljYXRpb25NYW5hZ2VyLmphdmE6NDEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS51aSA0IDQgMjAyMS0xMS0wMyAwOToxODoyOS40MTYKKyFNRVNTQUdFIEV4Y2VwdGlvbiBpbiBEZWNvcmF0b3IuIFRoZSAnSmF2YSBCdWlsZCBQYXRoIEluZGljYXRvcicgZGVjb3JhdG9yIHdpbGwgYmUgZGlzYWJsZWQuCishU1VCRU5UUlkgMSBvcmcuZWNsaXBzZS51aSA0IDQgMjAyMS0xMS0wMyAwOToxODoyOS40MTYKKyFNRVNTQUdFIGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuaXNPbkNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjI2NDYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkJ1aWxkcGF0aEluZGljYXRvckxhYmVsRGVjb3JhdG9yLmdldE92ZXJsYXkoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTo0NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuZGVjb3JhdGUoQnVpbGRwYXRoSW5kaWNhdG9yTGFiZWxEZWNvcmF0b3IuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkxpZ2h0d2VpZ2h0RGVjb3JhdG9yRGVmaW5pdGlvbi5kZWNvcmF0ZShMaWdodHdlaWdodERlY29yYXRvckRlZmluaXRpb24uamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIkTGlnaHR3ZWlnaHRSdW5uYWJsZS5ydW4oTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZGVjb3JhdG9ycy5MaWdodHdlaWdodERlY29yYXRvck1hbmFnZXIuZGVjb3JhdGUoTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmphdmE6Mzc3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmRlY29yYXRvcnMuTGlnaHR3ZWlnaHREZWNvcmF0b3JNYW5hZ2VyLmdldERlY29yYXRpb25zKExpZ2h0d2VpZ2h0RGVjb3JhdG9yTWFuYWdlci5qYXZhOjM1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5lbnN1cmVSZXN1bHRDYWNoZWQoRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjM0NykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5kZWNvcmF0b3JzLkRlY29yYXRpb25TY2hlZHVsZXIkMS5ydW4oRGVjb3JhdGlvblNjaGVkdWxlci5qYXZhOjMxMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciA0IDIgMjAyMS0xMS0wMyAwOToxODoyOS42MDAKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IiLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkR5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5nZXREZXBlbmRlbnRQcm9qZWN0cyhEeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuamF2YTozNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uY29tcHV0ZUR5bmFtaWNSZWZlcmVuY2VzRm9yUHJvamVjdChQcm9qZWN0RGVzY3JpcHRpb24uamF2YTo5NDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbEJ1aWxkQ29uZmlnUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbFJlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3QuZ2V0UmVmZXJlbmNlZFByb2plY3RzKFByb2plY3QuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmJ1aWxkQ29ubmVjdGVkQ29tcG9uZW50cyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6NzkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmNvbXB1dGVSZWxhdGVkKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToxOTkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmdldFNlbGVjdGVkUmVzb3VyY2VzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToyMTYpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5TZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25Jc09mVHlwZShTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlUmVzb3VyY2VBY3Rpb24udXBkYXRlU2VsZWN0aW9uKENsb3NlUmVzb3VyY2VBY3Rpb24uamF2YToyMjIpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5CYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uQ2hhbmdlZChCYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLnVwZGF0ZUFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YToyODYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmZpbGxBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6ODkpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UkMy5ydW4oTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmZpbGxBY3Rpb25CYXJzKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYiQxLnJ1bihDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iLnJ1bkluVUlUaHJlYWQoQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iLmxhbWJkYSQwKFVJSm9iLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUnVubmFibGVMb2NrLnJ1bihSdW5uYWJsZUxvY2suamF2YTozNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIucnVuQXN5bmNNZXNzYWdlcyhTeW5jaHJvbml6ZXIuamF2YToxODIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5Bc3luY01lc3NhZ2VzKERpc3BsYXkuamF2YTozOTA2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5qb2JzIDQgMiAyMDIxLTExLTAzIDA5OjE4OjI5LjYwMworIU1FU1NBR0UgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nOiAiSW5pdGlhbGl6aW5nIEphdmEgVG9vbGluZyIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuaW5pdGlhbGl6ZUFmdGVyTG9hZChKYXZhQ29yZS5qYXZhOjQzODEpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkluaXRpYWxpemVBZnRlckxvYWRKb2IkUmVhbEpvYi5ydW4oSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYi5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIDQgMCAyMDIxLTExLTAzIDA5OjE4OjI5Ljc1MworIU1FU1NBR0UgamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmdldERlcGVuZGVudFByb2plY3RzKER5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5qYXZhOjM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5jb21wdXRlRHluYW1pY1JlZmVyZW5jZXNGb3JQcm9qZWN0KFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjk0OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsQnVpbGRDb25maWdSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdC5nZXRSZWZlcmVuY2VkUHJvamVjdHMoUHJvamVjdC5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uYnVpbGRDb25uZWN0ZWRDb21wb25lbnRzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YTo3OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uY29tcHV0ZVJlbGF0ZWQoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjE5OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uZ2V0U2VsZWN0ZWRSZXNvdXJjZXMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjIxNikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbklzT2ZUeXBlKFNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MjQwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VSZXNvdXJjZUFjdGlvbi51cGRhdGVTZWxlY3Rpb24oQ2xvc2VSZXNvdXJjZUFjdGlvbi5qYXZhOjIyMikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25DaGFuZ2VkKEJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIudXBkYXRlQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjI4NikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuZmlsbEFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YTo4OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZSQzLnJ1bihOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UuZmlsbEFjdGlvbkJhcnMoTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iJDEucnVuKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IucnVuSW5VSVRocmVhZChDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6NzgpCisJYXQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2IubGFtYmRhJDAoVUlKb2IuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMS0wMyAwOToxODozNy40NDgKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorIVNFU1NJT04gMjAyMS0xMS0wNCAwODoxMzo1NS4yNjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjbGlwc2UuYnVpbGRJZD00LjguMC5JMjAxODA2MTEtMDUwMAoramF2YS52ZXJzaW9uPTEuOC4wXzIzMQoramF2YS52ZW5kb3I9T3JhY2xlIENvcnBvcmF0aW9uCitCb290TG9hZGVyIGNvbnN0YW50czogT1M9d2luMzIsIEFSQ0g9eDg2XzY0LCBXUz13aW4zMiwgTkw9ZGVfREUKK0ZyYW1ld29yayBhcmd1bWVudHM6ICAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIDQgMCAyMDIxLTExLTA0IDA4OjE0OjA4LjE4NQorIU1FU1NBR0UgRnJhbWV3b3JrRXZlbnQgRVJST1IKKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBFeGNlcHRpb24gaW4gb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KCkgb2YgYnVuZGxlIG9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6ODAwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCS4uLiAxMiBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIzNikKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjI3KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5jb250YWluc1Byb2ZpbGUoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIwOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMuY29udGFpbnNQcm9maWxlKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjExMikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLmVuZ2luZS5Qcm9maWxlUHJlZmVyZW5jZXMubG9hZChQcm9maWxlUHJlZmVyZW5jZXMuamF2YToyNTkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuY3JlYXRlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjM2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjIwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLmdldE5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6MTA1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUm9vdFByZWZlcmVuY2VzLm5vZGUoUm9vdFByZWZlcmVuY2VzLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5nZXRTaGFyZWRQcmVmZXJlbmNlcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6NTE4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIucmVzdG9yZVJlcG9zaXRvcmllcyhBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAxNSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmJhc2ljR2V0UmVwb3NpdG9yeShBYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTgxKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjY0OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTA3KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIubWV0YWRhdGEucmVwb3NpdG9yeS5NZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci5pbml0aWFsaXplTWV0YWRhdGFSZXBvc2l0b3J5KFJlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnByb3Zpc2lvbmFsLnAyLmRpcmVjdG9yeXdhdGNoZXIuUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihSZXBvc2l0b3J5TGlzdGVuZXIuamF2YTo1OSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlY29uY2lsZXIuZHJvcGlucy5Ecm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLjxpbml0PihEcm9waW5zUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6ODIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLndhdGNoRHJvcGlucyhBY3RpdmF0b3IuamF2YTo1MTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjE3MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmluY1N0YXJ0TGV2ZWwoTW9kdWxlQ29udGFpbmVyLmphdmE6MTY4MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2NjIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZG9Db250YWluZXJTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2MjQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuZGlzcGF0Y2hFdmVudChNb2R1bGVDb250YWluZXIuamF2YToxNTU1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIuZGlzcGF0Y2hFdmVudChFdmVudE1hbmFnZXIuamF2YToyMzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLnJ1bihFdmVudE1hbmFnZXIuamF2YTozNDApCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUgMiAwIDIwMjEtMTEtMDQgMDg6MTQ6NTQuMjM2CishTUVTU0FHRSBCdWlsdGluIExGUyBzdXBwb3J0IG5vdCBwcmVzZW50L2RldGVjdGVkCishU1RBQ0sgMAoramF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IG9yZy5lY2xpcHNlLmpnaXQubGZzLkJ1aWx0aW5MRlMgY2Fubm90IGJlIGZvdW5kIGJ5IG9yZy5lY2xpcHNlLmVnaXQuY29yZV81LjAuMC4yMDE4MDYxMzE1NTAtcgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo1MDgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC5jb3JlLkFjdGl2YXRvci5yZWdpc3RlckJ1aWx0aW5MRlMoQWN0aXZhdG9yLmphdmE6Mjc5KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MjEyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLnNvdXJjZXMuU2luZ2xlU291cmNlUGFja2FnZS5sb2FkQ2xhc3MoU2luZ2xlU291cmNlUGFja2FnZS5qYXZhOjM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3IkUmVwb3NpdG9yeUNoYW5nZVNjYW5uZXIuPGluaXQ+KEFjdGl2YXRvci5qYXZhOjkyMSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LnVpLkFjdGl2YXRvci5zZXR1cFJlcG9DaGFuZ2VTY2FubmVyKEFjdGl2YXRvci5qYXZhOjEwMzQpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc3RhcnQoQWN0aXZhdG9yLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6Nzc5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsJDMucnVuKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6MSkKKwlhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnRBY3RpdmF0b3IoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwuc3RhcnQoQnVuZGxlQ29udGV4dEltcGwuamF2YTo3MjkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5zdGFydFdvcmtlcjAoRXF1aW5veEJ1bmRsZS5qYXZhOjEwMDIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZSRFcXVpbm94TW9kdWxlLnN0YXJ0V29ya2VyKEVxdWlub3hCdW5kbGUuamF2YTozNTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmRvU3RhcnQoTW9kdWxlLmphdmE6NTgxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0NDkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLldvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5nZXRTb3VyY2VQcm92aWRlcnMoV29ya2JlbmNoU2VydmljZVJlZ2lzdHJ5LmphdmE6MTc0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLnNlcnZpY2VzLlNvdXJjZVByb3ZpZGVyU2VydmljZS5yZWFkUmVnaXN0cnkoU291cmNlUHJvdmlkZXJTZXJ2aWNlLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaCQzNC5ydW5XaXRoRXhjZXB0aW9uKFdvcmtiZW5jaC5qYXZhOjIzNzgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZyRTdGFydHVwUnVubmFibGUucnVuKFN0YXJ0dXBUaHJlYWRpbmcuamF2YTozMikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIuc3luY0V4ZWMoU3luY2hyb25pemVyLmphdmE6MjMzKQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlVJU3luY2hyb25pemVyLnN5bmNFeGVjKFVJU3luY2hyb25pemVyLmphdmE6MTQ0KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuc3luY0V4ZWMoRGlzcGxheS5qYXZhOjQ1NjcpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhcnR1cFRocmVhZGluZy5ydW5XaXRob3V0RXhjZXB0aW9ucyhTdGFydHVwVGhyZWFkaW5nLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXRpYWxpemVEZWZhdWx0U2VydmljZXMoV29ya2JlbmNoLmphdmE6MjM3MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guaW5pdChXb3JrYmVuY2guamF2YToxNjU0KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5ydW5VSShXb3JrYmVuY2guamF2YToyODU5KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NTQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goV29ya2JlbmNoLmphdmE6NTk3KQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFwcGxpY2F0aW9uLklERUFwcGxpY2F0aW9uLnN0YXJ0KElERUFwcGxpY2F0aW9uLmphdmE6MTUyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwuYXBwLkVjbGlwc2VBcHBIYW5kbGUucnVuKEVjbGlwc2VBcHBIYW5kbGUuamF2YToxOTYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnJ1bkFwcGxpY2F0aW9uKEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEzNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIuc3RhcnQoRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTA0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YToyNDMpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZTAoTmF0aXZlIE1ldGhvZCkKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKQorCWF0IHN1bi5yZWZsZWN0LkRlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKERlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YTo0MykKKwlhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1ldGhvZC5qYXZhOjQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVnaXQudWkgMiAwIDIwMjEtMTEtMDQgMDg6MTU6MjkuODg5CishTUVTU0FHRSBXYXJuaW5nOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSE9NRSBpcyBub3Qgc2V0LiBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIEdpdAordXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIHN0b3JlIHJlcG9zaXRvcmllczogJ0M6XFVzZXJzXEZyYW5jaycuIElmIHRoaXMgaXMKK25vdCBjb3JyZWN0IHBsZWFzZSBzZXQgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJlc3RhcnQgRWNsaXBzZS4gT3RoZXJ3aXNlIEdpdCBmb3IgV2luZG93cyBhbmQKK0VHaXQgbWlnaHQgYmVoYXZlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXkgc2VlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiBvbiB0aGUgVGVhbSA+IEdpdCA+IENvbmZpcm1hdGlvbnMgYW5kIFdhcm5pbmdzIHByZWZlcmVuY2UgcGFnZS4KKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDQgMDg6MTU6MzIuMTQ2CishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTA6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiB0aW1lZCBvdXQgd2FpdGluZyAoNTA3NW1zKSBmb3IgdGhyZWFkICJUaHJlYWRbV29ya2VyLTU6IERlY29yYXRpb24gQ2FsY3VsYXRpb24sNSxtYWluXSIgdG8gZmluaXNoIHN0YXJ0aW5nIGJ1bmRsZSAib3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2IFsyNjVdIi4gVG8gYXZvaWQgZGVhZGxvY2ssIHRocmVhZCAiVGhyZWFkW1dvcmtlci0xMDogRmluZCBhY2Nlc3NvciB0eXBlLDUsbWFpbl0iIGlzIHByb2NlZWRpbmcgYnV0ICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuRXF1aW5veEJ1bmRsZS5sb2FkQ2xhc3MoRXF1aW5veEJ1bmRsZS5qYXZhOjYwOSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5Lm9zZ2kuUmVnaXN0cnlTdHJhdGVneU9TR0kuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihSZWdpc3RyeVN0cmF0ZWd5T1NHSS5qYXZhOjE3NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkV4dGVuc2lvblJlZ2lzdHJ5LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oRXh0ZW5zaW9uUmVnaXN0cnkuamF2YTo5MzEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50LmphdmE6MjQzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5qYXZhOjYwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNvbXB1dGVDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NjYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjQyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE2NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmRldGVybWluZUlmT25DbGFzc3BhdGgoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjExNjkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjk5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jcmVhdGUoSmF2YUNvcmUuamF2YTozNDk4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5maW5kQWNjZXNzb3JUeXBlKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzI0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5hY2Nlc3MkMShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMxNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IkMi5ydW4oUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YToxMzMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMzIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZGV0ZXJtaW5lSWZPbkNsYXNzcGF0aChKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MTE2OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmNyZWF0ZShKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmNyZWF0ZShKYXZhTW9kZWxNYW5hZ2VyLmphdmE6OTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNyZWF0ZShKYXZhQ29yZS5qYXZhOjM0OTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yLmZpbmRBY2Nlc3NvclR5cGUoUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YTozMjQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yLmFjY2VzcyQxKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvciQyLnJ1bihQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjEzMykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDQgMDg6MTU6MzUuMTc3CishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTQ6IEluaXRpYWxpemluZyBKYXZhIFRvb2xpbmcsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMTRtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci01OiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTQ6IEluaXRpYWxpemluZyBKYXZhIFRvb2xpbmcsNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC4KKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBVbmFibGUgdG8gYWNxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIGxvY2sgZm9yIHRoZSBtb2R1bGU6IG9zZ2kuaWRlbnRpdHk7IHR5cGU9Im9zZ2kuYnVuZGxlIjsgdmVyc2lvbjpWZXJzaW9uPSIxLjkuMC4yMDE4MDYwNi0yMDM2Ijsgb3NnaS5pZGVudGl0eT0ib3JnLmVjbGlwc2UubTJlLmpkdCI7IHNpbmdsZXRvbjo9InRydWUiIFtpZD0yNjVdIFNUQVJURUQgW1NUQVJURURdCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzcpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMjcgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5pbml0aWFsaXplQWZ0ZXJMb2FkKEphdmFDb3JlLmphdmE6NDM4MSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuSW5pdGlhbGl6ZUFmdGVyTG9hZEpvYiRSZWFsSm9iLnJ1bihJbml0aWFsaXplQWZ0ZXJMb2FkSm9iLmphdmE6MzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5sb2NrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubG9jawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubG9jawpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubG9nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzkyMGMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5sb2cKQEAgLTAsMCArMSwxMjI4IEBACishU0VTU0lPTiAyMDIxLTExLTA0IDA4OjEzOjU1LjI2NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNsaXBzZS5idWlsZElkPTQuOC4wLkkyMDE4MDYxMS0wNTAwCitqYXZhLnZlcnNpb249MS44LjBfMjMxCitqYXZhLnZlbmRvcj1PcmFjbGUgQ29ycG9yYXRpb24KK0Jvb3RMb2FkZXIgY29uc3RhbnRzOiBPUz13aW4zMiwgQVJDSD14ODZfNjQsIFdTPXdpbjMyLCBOTD1kZV9ERQorRnJhbWV3b3JrIGFyZ3VtZW50czogIC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorQ29tbWFuZC1saW5lIGFyZ3VtZW50czogIC1vcyB3aW4zMiAtd3Mgd2luMzIgLWFyY2ggeDg2XzY0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdAorCitUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIGxvZyBmaWxlIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXNcLm1ldGFkYXRhXC5iYWtfMC5sb2cKK0NyZWF0ZWQgVGltZTogMjAyMS0xMS0wNCAwODoxNTozNi4zNzIKKworIUVOVFJZIG9yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlIDIgMTcgMjAyMS0xMS0wNCAwODoxNTozNi4zNzMKKyFNRVNTQUdFIFNlcnZlciDigJhvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXLigJkgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJC4gOyB2ZXJzaW9uOiAyLjAuNy52MjAxNzA5MDYtMTMyNworIVNUQUNLIDAKK2NvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBFeHBlY3RlZCBCRUdJTl9PQkpFQ1QgYnV0IHdhcyBTVFJJTkcgYXQgbGluZSAxIGNvbHVtbiAxIHBhdGggJAorCWF0IGNvbS5nb29nbGUuZ3Nvbi5pbnRlcm5hbC5iaW5kLlJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkkQWRhcHRlci5yZWFkKFJlZmxlY3RpdmVUeXBlQWRhcHRlckZhY3RvcnkuamF2YToyMjQpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg4OCkKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODUzKQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4MDIpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLmpzb24uSnNvbi5kZXNlcmlhbGl6ZShKc29uLmphdmE6OTEpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuSU8ucmVmcmVzaENvbmZpZ3VyYXRpb24oSU8uamF2YTo2NikKKwlhdCBvcmcuZWNsaXBzZS5lcHAuaW50ZXJuYWwubG9nZ2luZy5hZXJpLmlkZS5zZXJ2ZXIubWFycy5TZXJ2ZXJDb25uZWN0aW9uLnN0YXJ0VXAoU2VydmVyQ29ubmVjdGlvbi5qYXZhOjEyNCkKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RJZGxlU2VydmljZSREZWxlZ2F0ZVNlcnZpY2UkMS5ydW4oQWJzdHJhY3RJZGxlU2VydmljZS5qYXZhOjYyKQorCWF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZXMkNC5ydW4oQ2FsbGFibGVzLmphdmE6MTIyKQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OCkKK0NhdXNlZCBieTogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uc3RyZWFtLkpzb25SZWFkZXIuYmVnaW5PYmplY3QoSnNvblJlYWRlci5qYXZhOjM4NSkKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjEzKQorCS4uLiA5IG1vcmUKKworIUVOVFJZIG9yZy5lY2xpcHNlLm9zZ2kgMiAwIDIwMjEtMTEtMDQgMDg6MTU6MzcuMDcyCishTUVTU0FHRSBXaGlsZSBsb2FkaW5nIGNsYXNzICJvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIiLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTM6IFVwZGF0ZSBkeW5hbWljIEphdmEgc291cmNlcyB3b3JraW5nIHNldHMsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMDVtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci01OiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTM6IFVwZGF0ZSBkeW5hbWljIEphdmEgc291cmNlcyB3b3JraW5nIHNldHMsNSxtYWluXSIgaXMgcHJvY2VlZGluZyBidXQgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplciIgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC4KKyFTVEFDSyAwCitvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOiBVbmFibGUgdG8gYWNxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIGxvY2sgZm9yIHRoZSBtb2R1bGU6IG9zZ2kuaWRlbnRpdHk7IHR5cGU9Im9zZ2kuYnVuZGxlIjsgdmVyc2lvbjpWZXJzaW9uPSIxLjkuMC4yMDE4MDYwNi0yMDM2Ijsgb3NnaS5pZGVudGl0eT0ib3JnLmVjbGlwc2UubTJlLmpkdCI7IHNpbmdsZXRvbjo9InRydWUiIFtpZD0yNjVdIFNUQVJURUQgW1NUQVJURURdCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzcpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLmxvYWRDbGFzcyhFcXVpbm94QnVuZGxlLmphdmE6NjA5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkub3NnaS5SZWdpc3RyeVN0cmF0ZWd5T1NHSS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmphdmE6MTc3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuRXh0ZW5zaW9uUmVnaXN0cnkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihFeHRlbnNpb25SZWdpc3RyeS5qYXZhOjkzMSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnQuamF2YToyNDMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5Db25maWd1cmF0aW9uRWxlbWVudEhhbmRsZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKENvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmphdmE6NjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY29tcHV0ZUNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY2NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplcihKYXZhQ29yZS5qYXZhOjM2NDIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIkMTAucnVuKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMDc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjI4OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQWxsQ29udGFpbmVycyhKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzEzMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjExNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5idWlsZFN0cnVjdHVyZShKYXZhUHJvamVjdC5qYXZhOjQ3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5PcGVuYWJsZS5nZW5lcmF0ZUluZm9zKE9wZW5hYmxlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50Lm9wZW5XaGVuQ2xvc2VkKEphdmFFbGVtZW50LmphdmE6NTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzIzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldEVsZW1lbnRJbmZvKEphdmFFbGVtZW50LmphdmE6MzA5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFFbGVtZW50LmdldENoaWxkcmVuKEphdmFFbGVtZW50LmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKEphdmFQcm9qZWN0LmphdmE6MjIzNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci51cGRhdGVFbGVtZW50cyhEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTk0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxNzUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIkMS5ydW4oRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE2MikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKK0NhdXNlZCBieTogamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjogVGltZW91dCBhZnRlciB3YWl0aW5nIDUgc2Vjb25kcyB0byBhY3F1aXJlIHRoZSBsb2NrLgorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM0KQorCS4uLiAzOSBtb3JlCitSb290IGV4Y2VwdGlvbjoKK2phdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDAxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jb21wdXRlQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIoSmF2YUNvcmUuamF2YTozNjY2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyKEphdmFDb3JlLmphdmE6MzY0MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmJ1aWxkU3RydWN0dXJlKEphdmFQcm9qZWN0LmphdmE6NDc1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLk9wZW5hYmxlLmdlbmVyYXRlSW5mb3MoT3BlbmFibGUuamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQub3BlbldoZW5DbG9zZWQoSmF2YUVsZW1lbnQuamF2YTo1OTMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMjMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMDkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0Q2hpbGRyZW4oSmF2YUVsZW1lbnQuamF2YToyNjQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoSmF2YVByb2plY3QuamF2YToyMjM1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53b3JraW5nc2V0cy5EeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLnVwZGF0ZUVsZW1lbnRzKER5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIuamF2YToxOTQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLndvcmtpbmdzZXRzLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldFVwZGF0ZXIudXBkYXRlRWxlbWVudHMoRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlci5qYXZhOjE3NSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud29ya2luZ3NldHMuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0VXBkYXRlciQxLnJ1bihEeW5hbWljU291cmNlc1dvcmtpbmdTZXRVcGRhdGVyLmphdmE6MTYyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2Uub3NnaSAyIDAgMjAyMS0xMS0wNCAwODoxNTozNy4yMDEKKyFNRVNTQUdFIFdoaWxlIGxvYWRpbmcgY2xhc3MgIm9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhIZWxwZXJzIiwgdGhyZWFkICJUaHJlYWRbV29ya2VyLTEwOiBGaW5kIGFjY2Vzc29yIHR5cGUsNSxtYWluXSIgdGltZWQgb3V0IHdhaXRpbmcgKDUwMDNtcykgZm9yIHRocmVhZCAiVGhyZWFkW1dvcmtlci01OiBEZWNvcmF0aW9uIENhbGN1bGF0aW9uLDUsbWFpbl0iIHRvIGZpbmlzaCBzdGFydGluZyBidW5kbGUgIm9yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNiBbMjY1XSIuIFRvIGF2b2lkIGRlYWRsb2NrLCB0aHJlYWQgIlRocmVhZFtXb3JrZXItMTA6IEZpbmQgYWNjZXNzb3IgdHlwZSw1LG1haW5dIiBpcyBwcm9jZWVkaW5nIGJ1dCAib3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aEhlbHBlcnMiIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogVW5hYmxlIHRvIGFjcXVpcmUgdGhlIHN0YXRlIGNoYW5nZSBsb2NrIGZvciB0aGUgbW9kdWxlOiBvc2dpLmlkZW50aXR5OyB0eXBlPSJvc2dpLmJ1bmRsZSI7IHZlcnNpb246VmVyc2lvbj0iMS45LjAuMjAxODA2MDYtMjAzNiI7IG9zZ2kuaWRlbnRpdHk9Im9yZy5lY2xpcHNlLm0yZS5qZHQiOyBzaW5nbGV0b246PSJ0cnVlIiBbaWQ9MjY1XSBTVEFSVEVEIFtTVEFSVEVEXQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5sb2NrU3RhdGVDaGFuZ2UoTW9kdWxlLmphdmE6MzM3KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5zdGFydChNb2R1bGUuamF2YTo0MDEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsudXRpbC5TZWN1cmVBY3Rpb24uc3RhcnQoU2VjdXJlQWN0aW9uLmphdmE6NDY4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuaG9va3MuRWNsaXBzZUxhenlTdGFydGVyLnBvc3RGaW5kTG9jYWxDbGFzcyhFY2xpcHNlTGF6eVN0YXJ0ZXIuamF2YToxMTQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuY2xhc3NwYXRoLkNsYXNzcGF0aE1hbmFnZXIuZmluZExvY2FsQ2xhc3MoQ2xhc3NwYXRoTWFuYWdlci5qYXZhOjUwNSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5maW5kTG9jYWxDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjMyOCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZExvY2FsQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6MzkyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3NJbnRlcm5hbChCdW5kbGVMb2FkZXIuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTo0MTEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIubG9hZENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MTUwKQorCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozNTEpCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MjEyMCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YUNvcmUuamF2YTozNjE5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMTE4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LnJlc29sdmVDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YTozMjgyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFQcm9qZWN0LmdldFJlc29sdmVkQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MjM1OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmRldGVybWluZUlmT25DbGFzc3BhdGgoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjExNjkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjEwNTIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5jcmVhdGUoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjk5MykKKwlhdCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZS5jcmVhdGUoSmF2YUNvcmUuamF2YTozNDk4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5maW5kQWNjZXNzb3JUeXBlKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzI0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5hY2Nlc3MkMShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMxNSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IkMi5ydW4oUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YToxMzMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb246IFRpbWVvdXQgYWZ0ZXIgd2FpdGluZyA1IHNlY29uZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUubG9ja1N0YXRlQ2hhbmdlKE1vZHVsZS5qYXZhOjMzNCkKKwkuLi4gMjYgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOiBUaW1lb3V0IGFmdGVyIHdhaXRpbmcgNSBzZWNvbmRzIHRvIGFjcXVpcmUgdGhlIGxvY2suCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLmxvY2tTdGF0ZUNoYW5nZShNb2R1bGUuamF2YTozMzQpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQwMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay51dGlsLlNlY3VyZUFjdGlvbi5zdGFydChTZWN1cmVBY3Rpb24uamF2YTo0NjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5ob29rcy5FY2xpcHNlTGF6eVN0YXJ0ZXIucG9zdEZpbmRMb2NhbENsYXNzKEVjbGlwc2VMYXp5U3RhcnRlci5qYXZhOjExNCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5jbGFzc3BhdGguQ2xhc3NwYXRoTWFuYWdlci5maW5kTG9jYWxDbGFzcyhDbGFzc3BhdGhNYW5hZ2VyLmphdmE6NTA1KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmZpbmRMb2NhbENsYXNzKE1vZHVsZUNsYXNzTG9hZGVyLmphdmE6MzI4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kTG9jYWxDbGFzcyhCdW5kbGVMb2FkZXIuamF2YTozOTIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRDbGFzc0ludGVybmFsKEJ1bmRsZUxvYWRlci5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjQxMSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5Nb2R1bGVDbGFzc0xvYWRlci5sb2FkQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YToxNTApCisJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjM1MSkKKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZShNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6NDQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5pbml0aWFsaXplQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTg0KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTIwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZGV0ZXJtaW5lSWZPbkNsYXNzcGF0aChKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MTE2OSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmNyZWF0ZShKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MTA1MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmNyZWF0ZShKYXZhTW9kZWxNYW5hZ2VyLmphdmE6OTkzKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmNyZWF0ZShKYXZhQ29yZS5qYXZhOjM0OTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yLmZpbmRBY2Nlc3NvclR5cGUoUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YTozMjQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yLmFjY2VzcyQxKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MzE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5Qcm9wZXJ0aWVzRmlsZUVkaXRvciQyLnJ1bihQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjEzMykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIDQgMiAyMDIxLTExLTA0IDA4OjE1OjQyLjg1OQorIU1FU1NBR0UgUHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBpbnZva2luZyBjb2RlIGZyb20gcGx1Zy1pbjogIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi4KKyFTVEFDSyAwCitqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLk1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuZ2V0QnVpbGRQYXRoTWFuYWdlcihNYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmphdmE6ODApCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTI4KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ2xhc3NwYXRoQ2hhbmdlLmdlbmVyYXRlRGVsdGEoQ2xhc3NwYXRoQ2hhbmdlLmphdmE6MjQwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkRlbHRhUHJvY2Vzc29yLnJlc291cmNlQ2hhbmdlZChEZWx0YVByb2Nlc3Nvci5qYXZhOjIxMDcpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRGVsdGFQcm9jZXNzaW5nU3RhdGUucmVzb3VyY2VDaGFuZ2VkKERlbHRhUHJvY2Vzc2luZ1N0YXRlLmphdmE6NDc0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIkMS5ydW4oTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhOjI5NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuZXZlbnRzLk5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YToyODcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlci5icm9hZGNhc3RDaGFuZ2VzKE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YToxNTApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLmJyb2FkY2FzdFBvc3RDaGFuZ2UoV29ya3NwYWNlLmphdmE6Mzc2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5lbmRPcGVyYXRpb24oV29ya3NwYWNlLmphdmE6MTQ5OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMDIpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5ldmVudHMuTm90aWZpY2F0aW9uTWFuYWdlciROb3RpZnlKb2IucnVuKE5vdGlmaWNhdGlvbk1hbmFnZXIuamF2YTo0MSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUuam9icyA0IDIgMjAyMS0xMS0wNCAwODoxNTo0Mi44NjMKKyFNRVNTQUdFIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIGR1cmluZzogIkZpbmQgYWNjZXNzb3IgdHlwZSIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmdldEJ1aWxkUGF0aE1hbmFnZXIoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjgwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMjApCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5kZXRlcm1pbmVJZk9uQ2xhc3NwYXRoKEphdmFNb2RlbE1hbmFnZXIuamF2YToxMTY5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuY3JlYXRlKEphdmFNb2RlbE1hbmFnZXIuamF2YToxMDUyKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuY3JlYXRlKEphdmFNb2RlbE1hbmFnZXIuamF2YTo5OTMpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuY3JlYXRlKEphdmFDb3JlLmphdmE6MzQ5OCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IuZmluZEFjY2Vzc29yVHlwZShQcm9wZXJ0aWVzRmlsZUVkaXRvci5qYXZhOjMyNCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuUHJvcGVydGllc0ZpbGVFZGl0b3IuYWNjZXNzJDEoUHJvcGVydGllc0ZpbGVFZGl0b3IuamF2YTozMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLlByb3BlcnRpZXNGaWxlRWRpdG9yJDIucnVuKFByb3BlcnRpZXNGaWxlRWRpdG9yLmphdmE6MTMzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5qb2JzIDQgMiAyMDIxLTExLTA0IDA4OjE1OjQyLjk4OQorIU1FU1NBR0UgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nOiAiSW5pdGlhbGl6aW5nIEphdmEgVG9vbGluZyIuCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmdldEJ1aWxkUGF0aE1hbmFnZXIoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjgwKQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmluaXRpYWxpemVBZnRlckxvYWQoSmF2YUNvcmUuamF2YTo0MzgxKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5Jbml0aWFsaXplQWZ0ZXJMb2FkSm9iJFJlYWxKb2IucnVuKEluaXRpYWxpemVBZnRlckxvYWRKb2IuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkKKworIUVOVFJZIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciA0IDIgMjAyMS0xMS0wNCAwODoxNTo0Mi45OTEKKyFNRVNTQUdFIFByb2JsZW1zIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgY29kZSBmcm9tIHBsdWctaW46ICJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IiLgorIVNUQUNLIDAKK2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbgorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5pbml0aWFsaXplKE1hdmVuQ2xhc3NwYXRoQ29udGFpbmVySW5pdGlhbGl6ZXIuamF2YTo0NikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxODQpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlciQxMC5ydW4oSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMwNzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLldvcmtzcGFjZS5ydW4oV29ya3NwYWNlLmphdmE6MjMxNikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyLmluaXRpYWxpemVBbGxDb250YWluZXJzKEphdmFNb2RlbE1hbmFnZXIuamF2YTozMTMwKQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFNb2RlbE1hbmFnZXIuamF2YToyMTE1KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlLmdldENsYXNzcGF0aENvbnRhaW5lcihKYXZhQ29yZS5qYXZhOjM2MTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMxMTgpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QucmVzb2x2ZUNsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjMyODIpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgoSmF2YVByb2plY3QuamF2YToyMzU5KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkR5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5nZXREZXBlbmRlbnRQcm9qZWN0cyhEeW5hbWljUHJvamVjdFJlZmVyZW5jZXMuamF2YTozNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uY29tcHV0ZUR5bmFtaWNSZWZlcmVuY2VzRm9yUHJvamVjdChQcm9qZWN0RGVzY3JpcHRpb24uamF2YTo5NDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbEJ1aWxkQ29uZmlnUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyNjUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdERlc2NyaXB0aW9uLmdldEFsbFJlZmVyZW5jZXMoUHJvamVjdERlc2NyaXB0aW9uLmphdmE6MjIxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3QuZ2V0UmVmZXJlbmNlZFByb2plY3RzKFByb2plY3QuamF2YTo0NzApCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmJ1aWxkQ29ubmVjdGVkQ29tcG9uZW50cyhDbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmphdmE6NzkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmNvbXB1dGVSZWxhdGVkKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToxOTkpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5DbG9zZVVucmVsYXRlZFByb2plY3RzQWN0aW9uLmdldFNlbGVjdGVkUmVzb3VyY2VzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YToyMTYpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5TZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25Jc09mVHlwZShTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjI0MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlUmVzb3VyY2VBY3Rpb24udXBkYXRlU2VsZWN0aW9uKENsb3NlUmVzb3VyY2VBY3Rpb24uamF2YToyMjIpCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5CYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uc2VsZWN0aW9uQ2hhbmdlZChCYXNlU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb24uamF2YToxMjQpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLnVwZGF0ZUFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YToyODYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubmF2aWdhdG9yLnJlc291cmNlcy5hY3Rpb25zLlJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmZpbGxBY3Rpb25CYXJzKFJlc291cmNlTWdtdEFjdGlvblByb3ZpZGVyLmphdmE6ODkpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UkMy5ydW4oTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5OYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmZpbGxBY3Rpb25CYXJzKE5hdmlnYXRvckFjdGlvblNlcnZpY2UuamF2YToyNTgpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkVXBkYXRlQWN0aW9uQmFyc0pvYiQxLnJ1bihDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iLnJ1bkluVUlUaHJlYWQoQ29tbW9uTmF2aWdhdG9yTWFuYWdlci5qYXZhOjc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iLmxhbWJkYSQwKFVJSm9iLmphdmE6OTUpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUnVubmFibGVMb2NrLnJ1bihSdW5uYWJsZUxvY2suamF2YTozNykKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TeW5jaHJvbml6ZXIucnVuQXN5bmNNZXNzYWdlcyhTeW5jaHJvbml6ZXIuamF2YToxODIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5ydW5Bc3luY01lc3NhZ2VzKERpc3BsYXkuamF2YTozOTA2KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkucmVhZEFuZERpc3BhdGNoKERpc3BsYXkuamF2YTozNTM3KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5zd3QuUGFydFJlbmRlcmluZ0VuZ2luZSQ1LnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTE3MCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lLnJ1bihQYXJ0UmVuZGVyaW5nRW5naW5lLmphdmE6MTA1OSkKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guRTRXb3JrYmVuY2guY3JlYXRlQW5kUnVuVUkoRTRXb3JrYmVuY2guamF2YToxNTMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmxhbWJkYSQzKFdvcmtiZW5jaC5qYXZhOjY2NykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGUuUmVhbG0ucnVuV2l0aERlZmF1bHQoUmVhbG0uamF2YTozMzYpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpCisJYXQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goUGxhdGZvcm1VSS5qYXZhOjE0OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuYXBwbGljYXRpb24uSURFQXBwbGljYXRpb24uc3RhcnQoSURFQXBwbGljYXRpb24uamF2YToxNTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5hcHAuRWNsaXBzZUFwcEhhbmRsZS5ydW4oRWNsaXBzZUFwcEhhbmRsZS5qYXZhOjE5NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuaW50ZXJuYWwuYWRhcHRvci5FY2xpcHNlQXBwTGF1bmNoZXIucnVuQXBwbGljYXRpb24oRWNsaXBzZUFwcExhdW5jaGVyLmphdmE6MTM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6Mzg4KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjI0MykKKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NjIpCisJYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjQzKQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5pbnZva2VGcmFtZXdvcmsoTWFpbi5qYXZhOjY1NikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uYmFzaWNSdW4oTWFpbi5qYXZhOjU5MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4ucnVuKE1haW4uamF2YToxNDk4KQorCishRU5UUlkgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIDQgMCAyMDIxLTExLTA0IDA4OjE1OjQzLjA5NgorIU1FU1NBR0UgamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCishU1RBQ0sgMAoramF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5NYXZlbkNsYXNzcGF0aENvbnRhaW5lckluaXRpYWxpemVyLmluaXRpYWxpemUoTWF2ZW5DbGFzc3BhdGhDb250YWluZXJJbml0aWFsaXplci5qYXZhOjQ2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUNvbnRhaW5lcihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzE4NCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhTW9kZWxNYW5hZ2VyJDEwLnJ1bihKYXZhTW9kZWxNYW5hZ2VyLmphdmE6MzA3NikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkphdmFNb2RlbE1hbmFnZXIuaW5pdGlhbGl6ZUFsbENvbnRhaW5lcnMoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjMxMzApCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YU1vZGVsTWFuYWdlci5nZXRDbGFzc3BhdGhDb250YWluZXIoSmF2YU1vZGVsTWFuYWdlci5qYXZhOjIxMTUpCisJYXQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmUuZ2V0Q2xhc3NwYXRoQ29udGFpbmVyKEphdmFDb3JlLmphdmE6MzYxOSkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzExOCkKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5yZXNvbHZlQ2xhc3NwYXRoKEphdmFQcm9qZWN0LmphdmE6MzI4MikKKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aChKYXZhUHJvamVjdC5qYXZhOjIzNTkpCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuRHluYW1pY1Byb2plY3RSZWZlcmVuY2VzLmdldERlcGVuZGVudFByb2plY3RzKER5bmFtaWNQcm9qZWN0UmVmZXJlbmNlcy5qYXZhOjM0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlByb2plY3REZXNjcmlwdGlvbi5jb21wdXRlRHluYW1pY1JlZmVyZW5jZXNGb3JQcm9qZWN0KFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjk0OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsQnVpbGRDb25maWdSZWZlcmVuY2VzKFByb2plY3REZXNjcmlwdGlvbi5qYXZhOjI2NSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Qcm9qZWN0RGVzY3JpcHRpb24uZ2V0QWxsUmVmZXJlbmNlcyhQcm9qZWN0RGVzY3JpcHRpb24uamF2YToyMjEpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuUHJvamVjdC5nZXRSZWZlcmVuY2VkUHJvamVjdHMoUHJvamVjdC5qYXZhOjQ3MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uYnVpbGRDb25uZWN0ZWRDb21wb25lbnRzKENsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uamF2YTo3OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uY29tcHV0ZVJlbGF0ZWQoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjE5OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNsb3NlVW5yZWxhdGVkUHJvamVjdHNBY3Rpb24uZ2V0U2VsZWN0ZWRSZXNvdXJjZXMoQ2xvc2VVbnJlbGF0ZWRQcm9qZWN0c0FjdGlvbi5qYXZhOjIxNikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLnNlbGVjdGlvbklzT2ZUeXBlKFNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uLmphdmE6MjQwKQorCWF0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ2xvc2VSZXNvdXJjZUFjdGlvbi51cGRhdGVTZWxlY3Rpb24oQ2xvc2VSZXNvdXJjZUFjdGlvbi5qYXZhOjIyMikKKwlhdCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5zZWxlY3Rpb25DaGFuZ2VkKEJhc2VTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbi5qYXZhOjEyNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIudXBkYXRlQWN0aW9uQmFycyhSZXNvdXJjZU1nbXRBY3Rpb25Qcm92aWRlci5qYXZhOjI4NikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5uYXZpZ2F0b3IucmVzb3VyY2VzLmFjdGlvbnMuUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuZmlsbEFjdGlvbkJhcnMoUmVzb3VyY2VNZ210QWN0aW9uUHJvdmlkZXIuamF2YTo4OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuTmF2aWdhdG9yQWN0aW9uU2VydmljZSQzLnJ1bihOYXZpZ2F0b3JBY3Rpb25TZXJ2aWNlLmphdmE6MjY1KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TYWZlUnVubmVyLnJ1bihTYWZlUnVubmVyLmphdmE6NDIpCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLk5hdmlnYXRvckFjdGlvblNlcnZpY2UuZmlsbEFjdGlvbkJhcnMoTmF2aWdhdG9yQWN0aW9uU2VydmljZS5qYXZhOjI1OCkKKwlhdCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yTWFuYWdlciRVcGRhdGVBY3Rpb25CYXJzSm9iJDEucnVuKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lci5ydW4oU2FmZVJ1bm5lci5qYXZhOjQyKQorCWF0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3JNYW5hZ2VyJFVwZGF0ZUFjdGlvbkJhcnNKb2IucnVuSW5VSVRocmVhZChDb21tb25OYXZpZ2F0b3JNYW5hZ2VyLmphdmE6NzgpCisJYXQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2IubGFtYmRhJDAoVUlKb2IuamF2YTo5NSkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5SdW5uYWJsZUxvY2sucnVuKFJ1bm5hYmxlTG9jay5qYXZhOjM3KQorCWF0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplci5ydW5Bc3luY01lc3NhZ2VzKFN5bmNocm9uaXplci5qYXZhOjE4MikKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkFzeW5jTWVzc2FnZXMoRGlzcGxheS5qYXZhOjM5MDYpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzcpCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLnN3dC5QYXJ0UmVuZGVyaW5nRW5naW5lJDUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMTcwKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMS0wNCAwODoxNTo1OS4xOTIKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTEtMDQgMDg6Mzk6MDkuMDIzCishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMS0wNCAwODozOTowOS4wMjYKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTEtMDUgMDg6MjU6MDcuNjk4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMS0wNSAwODoyNToxOS40MTEKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTExLTA1IDA4OjI1OjM5Ljg3NworIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTExLTA1IDA4OjI2OjM4LjQ4NQorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTEtMDUgMDg6MjY6NDUuMjE4CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMS0wNSAwODoyNzowMS45NjUKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTEtMDUgMDg6MzA6MDEuNjE2CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMS0wNSAwODozMDowMS42MjIKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTEtMDUgMTc6NTU6MjYuNzgxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1wcm9kdWN0IG9yZy5lY2xpcHNlLmVwcC5wYWNrYWdlLmphdmEucHJvZHVjdCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QKK0NvbW1hbmQtbGluZSBhcmd1bWVudHM6ICAtb3Mgd2luMzIgLXdzIHdpbjMyIC1hcmNoIHg4Nl82NCAtcHJvZHVjdCBvcmcuZWNsaXBzZS5lcHAucGFja2FnZS5qYXZhLnByb2R1Y3QgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0IC1kYXRhIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXMgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMS0wNSAxNzo1NTozMi4yOTMKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTExLTA1IDE3OjU1OjM4LjA2NworIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTExLTA1IDE3OjU2OjExLjY1NQorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTEtMDUgMTc6NTY6MTQuOTcwCishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMS0wNSAxNzo1NjoyOS4yNjIKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQorCishRU5UUlkgb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suYXBwZW5kZXIgMiAwIDIwMjEtMTEtMDUgMTg6MDA6NTcuMDM1CishTUVTU0FHRSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKKyFTVEFDSyAwCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkKKwkuLi4gOCBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcCAxIDAgMjAyMS0xMS0wNSAxODowMDo1Ny4wNDAKKyFNRVNTQUdFIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIHRoZSBtb2RlbCByZXBvc2l0b3JpZXMuIEFyZSB5b3Ugb2ZmbGluZT8KKyFTRVNTSU9OIDIwMjEtMTEtMDkgMTU6MTY6MDUuMDI5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2xpcHNlLmJ1aWxkSWQ9NC44LjAuSTIwMTgwNjExLTA1MDAKK2phdmEudmVyc2lvbj0xLjguMF8yMzEKK2phdmEudmVuZG9yPU9yYWNsZSBDb3Jwb3JhdGlvbgorQm9vdExvYWRlciBjb25zdGFudHM6IE9TPXdpbjMyLCBBUkNIPXg4Nl82NCwgV1M9d2luMzIsIE5MPWRlX0RFCitGcmFtZXdvcmsgYXJndW1lbnRzOiAgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CitDb21tYW5kLWxpbmUgYXJndW1lbnRzOiAgLW9zIHdpbjMyIC13cyB3aW4zMiAtYXJjaCB4ODZfNjQgLXByb2R1Y3Qgb3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuamF2YS5wcm9kdWN0CisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyA0IDAgMjAyMS0xMS0wOSAxNToxNjoxNi43OTIKKyFNRVNTQUdFIEZyYW1ld29ya0V2ZW50IEVSUk9SCishU1RBQ0sgMAorb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjogRXhjZXB0aW9uIGluIG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydCgpIG9mIGJ1bmRsZSBvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucy4KKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjgwMCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwkuLi4gMTIgbW9yZQorUm9vdCBleGNlcHRpb246CitqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOiBSZWdpc3RyeSBEaXJlY3Rvcnkgbm90IGF2YWlsYWJsZTogYzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXGphdmEtcGhvdG9uXGVjbGlwc2VccDJcb3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmVccHJvZmlsZVJlZ2lzdHJ5LgorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMzYpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmdldFByb2ZpbGVNYXAoTGF6eVByb2ZpbGVSZWdpc3RyeS5qYXZhOjIyNykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuY29udGFpbnNQcm9maWxlKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMDgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmNvbnRhaW5zUHJvZmlsZShQcm9maWxlUHJlZmVyZW5jZXMuamF2YToxMTIpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5lbmdpbmUuUHJvZmlsZVByZWZlcmVuY2VzLmxvYWQoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MjU5KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmNyZWF0ZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTozNjcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyMCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5nZXROb2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjEwNSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlJvb3RQcmVmZXJlbmNlcy5ub2RlKFJvb3RQcmVmZXJlbmNlcy5qYXZhOjg0KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjUxOCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLnJlc3RvcmVSZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwMTUpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5iYXNpY0dldFJlcG9zaXRvcnkoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjE4MSkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmxvYWRSZXBvc2l0b3J5KEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2NDkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Lk1ldGFkYXRhUmVwb3NpdG9yeU1hbmFnZXIubG9hZFJlcG9zaXRvcnkoTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjEwNykKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLm1ldGFkYXRhLnJlcG9zaXRvcnkuTWV0YWRhdGFSZXBvc2l0b3J5TWFuYWdlci5sb2FkUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnlNYW5hZ2VyLmphdmE6MTAyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucHJvdmlzaW9uYWwucDIuZGlyZWN0b3J5d2F0Y2hlci5SZXBvc2l0b3J5TGlzdGVuZXIuaW5pdGlhbGl6ZU1ldGFkYXRhUmVwb3NpdG9yeShSZXBvc2l0b3J5TGlzdGVuZXIuamF2YToxMDQpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wcm92aXNpb25hbC5wMi5kaXJlY3Rvcnl3YXRjaGVyLlJlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oUmVwb3NpdG9yeUxpc3RlbmVyLmphdmE6NTkpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZWNvbmNpbGVyLmRyb3BpbnMuRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci48aW5pdD4oRHJvcGluc1JlcG9zaXRvcnlMaXN0ZW5lci5qYXZhOjgyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci53YXRjaERyb3BpbnMoQWN0aXZhdG9yLmphdmE6NTE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVjb25jaWxlci5kcm9waW5zLkFjdGl2YXRvci5zdGFydChBY3RpdmF0b3IuamF2YToxNzEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YTo3NzkpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dEltcGwkMy5ydW4oQnVuZGxlQ29udGV4dEltcGwuamF2YToxKQorCWF0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoTmF0aXZlIE1ldGhvZCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydEFjdGl2YXRvcihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbC5zdGFydChCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjcyOSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlLnN0YXJ0V29ya2VyMChFcXVpbm94QnVuZGxlLmphdmE6MTAwMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5FcXVpbm94QnVuZGxlJEVxdWlub3hNb2R1bGUuc3RhcnRXb3JrZXIoRXF1aW5veEJ1bmRsZS5qYXZhOjM1NCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuZG9TdGFydChNb2R1bGUuamF2YTo1ODEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlLnN0YXJ0KE1vZHVsZS5qYXZhOjQ0OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5pbmNTdGFydExldmVsKE1vZHVsZUNvbnRhaW5lci5qYXZhOjE2ODIpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5jb250YWluZXIuTW9kdWxlQ29udGFpbmVyJENvbnRhaW5lclN0YXJ0TGV2ZWwuaW5jU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjYyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRvQ29udGFpbmVyU3RhcnRMZXZlbChNb2R1bGVDb250YWluZXIuamF2YToxNjI0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZUNvbnRhaW5lciRDb250YWluZXJTdGFydExldmVsLmRpc3BhdGNoRXZlbnQoTW9kdWxlQ29udGFpbmVyLmphdmE6MTU1NSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGVDb250YWluZXIkQ29udGFpbmVyU3RhcnRMZXZlbC5kaXNwYXRjaEV2ZW50KE1vZHVsZUNvbnRhaW5lci5qYXZhOjEpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyLmRpc3BhdGNoRXZlbnQoRXZlbnRNYW5hZ2VyLmphdmE6MjMwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLmV2ZW50bWdyLkV2ZW50TWFuYWdlciRFdmVudFRocmVhZC5ydW4oRXZlbnRNYW5hZ2VyLmphdmE6MzQwKQorCishRU5UUlkgb3JnLmVjbGlwc2UuZWdpdC5jb3JlIDIgMCAyMDIxLTExLTA5IDE1OjE2OjQxLjE0MAorIU1FU1NBR0UgQnVpbHRpbiBMRlMgc3VwcG9ydCBub3QgcHJlc2VudC9kZXRlY3RlZAorIVNUQUNLIDAKK2phdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5CdWlsdGluTEZTIGNhbm5vdCBiZSBmb3VuZCBieSBvcmcuZWNsaXBzZS5lZ2l0LmNvcmVfNS4wLjAuMjAxODA2MTMxNTUwLXIKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NTA4KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6MjY0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQuY29yZS5BY3RpdmF0b3IucmVnaXN0ZXJCdWlsdGluTEZTKEFjdGl2YXRvci5qYXZhOjI3OSkKKwlhdCBvcmcuZWNsaXBzZS5lZ2l0LmNvcmUuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjIxMikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5zb3VyY2VzLlNpbmdsZVNvdXJjZVBhY2thZ2UubG9hZENsYXNzKFNpbmdsZVNvdXJjZVBhY2thZ2UuamF2YTozNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yJFJlcG9zaXRvcnlDaGFuZ2VTY2FubmVyLjxpbml0PihBY3RpdmF0b3IuamF2YTo5MjEpCisJYXQgb3JnLmVjbGlwc2UuZWdpdC51aS5BY3RpdmF0b3Iuc2V0dXBSZXBvQ2hhbmdlU2Nhbm5lcihBY3RpdmF0b3IuamF2YToxMDM0KQorCWF0IG9yZy5lY2xpcHNlLmVnaXQudWkuQWN0aXZhdG9yLnN0YXJ0KEFjdGl2YXRvci5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjc3OSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmZyYW1ld29yay5CdW5kbGVDb250ZXh0SW1wbCQzLnJ1bihCdW5kbGVDb250ZXh0SW1wbC5qYXZhOjEpCisJYXQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChOYXRpdmUgTWV0aG9kKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0QWN0aXZhdG9yKEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzcyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHRJbXBsLnN0YXJ0KEJ1bmRsZUNvbnRleHRJbXBsLmphdmE6NzI5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUuc3RhcnRXb3JrZXIwKEVxdWlub3hCdW5kbGUuamF2YToxMDAyKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUkRXF1aW5veE1vZHVsZS5zdGFydFdvcmtlcihFcXVpbm94QnVuZGxlLmphdmE6MzU0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuY29udGFpbmVyLk1vZHVsZS5kb1N0YXJ0KE1vZHVsZS5qYXZhOjU4MSkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmNvbnRhaW5lci5Nb2R1bGUuc3RhcnQoTW9kdWxlLmphdmE6NDQ5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuZnJhbWV3b3JrLnV0aWwuU2VjdXJlQWN0aW9uLnN0YXJ0KFNlY3VyZUFjdGlvbi5qYXZhOjQ2OCkKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmhvb2tzLkVjbGlwc2VMYXp5U3RhcnRlci5wb3N0RmluZExvY2FsQ2xhc3MoRWNsaXBzZUxhenlTdGFydGVyLmphdmE6MTE0KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLmNsYXNzcGF0aC5DbGFzc3BhdGhNYW5hZ2VyLmZpbmRMb2NhbENsYXNzKENsYXNzcGF0aE1hbmFnZXIuamF2YTo1MDUpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuTW9kdWxlQ2xhc3NMb2FkZXIuZmluZExvY2FsQ2xhc3MoTW9kdWxlQ2xhc3NMb2FkZXIuamF2YTozMjgpCisJYXQgb3JnLmVjbGlwc2Uub3NnaS5pbnRlcm5hbC5sb2FkZXIuQnVuZGxlTG9hZGVyLmZpbmRMb2NhbENsYXNzKEJ1bmRsZUxvYWRlci5qYXZhOjM5MikKKwlhdCBvcmcuZWNsaXBzZS5vc2dpLmludGVybmFsLmxvYWRlci5CdW5kbGVMb2FkZXIuZmluZENsYXNzSW50ZXJuYWwoQnVuZGxlTG9hZGVyLmphdmE6NDcwKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDE5KQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLkJ1bmRsZUxvYWRlci5maW5kQ2xhc3MoQnVuZGxlTG9hZGVyLmphdmE6NDExKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwubG9hZGVyLk1vZHVsZUNsYXNzTG9hZGVyLmxvYWRDbGFzcyhNb2R1bGVDbGFzc0xvYWRlci5qYXZhOjE1MCkKKwlhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIubG9hZENsYXNzKENsYXNzTG9hZGVyLmphdmE6MzUxKQorCWF0IG9yZy5lY2xpcHNlLm9zZ2kuaW50ZXJuYWwuZnJhbWV3b3JrLkVxdWlub3hCdW5kbGUubG9hZENsYXNzKEVxdWlub3hCdW5kbGUuamF2YTo2MDkpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5vc2dpLlJlZ2lzdHJ5U3RyYXRlZ3lPU0dJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oUmVnaXN0cnlTdHJhdGVneU9TR0kuamF2YToxNzcpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZWdpc3RyeS5FeHRlbnNpb25SZWdpc3RyeS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEV4dGVuc2lvblJlZ2lzdHJ5LmphdmE6OTMxKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVnaXN0cnkuQ29uZmlndXJhdGlvbkVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihDb25maWd1cmF0aW9uRWxlbWVudC5qYXZhOjI0MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlZ2lzdHJ5LkNvbmZpZ3VyYXRpb25FbGVtZW50SGFuZGxlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQ29uZmlndXJhdGlvbkVsZW1lbnRIYW5kbGUuamF2YTo2MCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Xb3JrYmVuY2hTZXJ2aWNlUmVnaXN0cnkuZ2V0U291cmNlUHJvdmlkZXJzKFdvcmtiZW5jaFNlcnZpY2VSZWdpc3RyeS5qYXZhOjE3NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5zZXJ2aWNlcy5Tb3VyY2VQcm92aWRlclNlcnZpY2UucmVhZFJlZ2lzdHJ5KFNvdXJjZVByb3ZpZGVyU2VydmljZS5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gkMzQucnVuV2l0aEV4Y2VwdGlvbihXb3JrYmVuY2guamF2YToyMzc4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmckU3RhcnR1cFJ1bm5hYmxlLnJ1bihTdGFydHVwVGhyZWFkaW5nLmphdmE6MzIpCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyLnN5bmNFeGVjKFN5bmNocm9uaXplci5qYXZhOjIzMykKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5VSVN5bmNocm9uaXplci5zeW5jRXhlYyhVSVN5bmNocm9uaXplci5qYXZhOjE0NCkKKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnN5bmNFeGVjKERpc3BsYXkuamF2YTo0NTY3KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YXJ0dXBUaHJlYWRpbmcucnVuV2l0aG91dEV4Y2VwdGlvbnMoU3RhcnR1cFRocmVhZGluZy5qYXZhOjk1KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5pbml0aWFsaXplRGVmYXVsdFNlcnZpY2VzKFdvcmtiZW5jaC5qYXZhOjIzNzMpCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmluaXQoV29ya2JlbmNoLmphdmE6MTY1NCkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gucnVuVUkoV29ya2JlbmNoLmphdmE6Mjg1OSkKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2gubGFtYmRhJDMoV29ya2JlbmNoLmphdmE6NjU0KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikKKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2guY3JlYXRlQW5kUnVuV29ya2JlbmNoKFdvcmtiZW5jaC5qYXZhOjU5NykKKwlhdCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChQbGF0Zm9ybVVJLmphdmE6MTQ4KQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmludGVybmFsLmFkYXB0b3IuRWNsaXBzZUFwcExhdW5jaGVyLnN0YXJ0KEVjbGlwc2VBcHBMYXVuY2hlci5qYXZhOjEwNCkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRvci5FY2xpcHNlU3RhcnRlci5ydW4oRWNsaXBzZVN0YXJ0ZXIuamF2YTozODgpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKQorCWF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YTo2MikKKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpCisJYXQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmludm9rZShNZXRob2QuamF2YTo0OTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmludm9rZUZyYW1ld29yayhNYWluLmphdmE6NjU2KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5iYXNpY1J1bihNYWluLmphdmE6NTkyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuTWFpbi5ydW4oTWFpbi5qYXZhOjE0OTgpCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZSAyIDE3IDIwMjEtMTEtMDkgMTU6MTc6NTQuMTQ3CishTUVTU0FHRSBTZXJ2ZXIg4oCYb3JnLmVjbGlwc2UuZXBwLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVy4oCZIGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQuIDsgdmVyc2lvbjogMi4wLjcudjIwMTcwOTA2LTEzMjcKKyFTVEFDSyAwCitjb20uZ29vZ2xlLmdzb24uSnNvblN5bnRheEV4Y2VwdGlvbjogamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogRXhwZWN0ZWQgQkVHSU5fT0JKRUNUIGJ1dCB3YXMgU1RSSU5HIGF0IGxpbmUgMSBjb2x1bW4gMSBwYXRoICQKKwlhdCBjb20uZ29vZ2xlLmdzb24uaW50ZXJuYWwuYmluZC5SZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5JEFkYXB0ZXIucmVhZChSZWZsZWN0aXZlVHlwZUFkYXB0ZXJGYWN0b3J5LmphdmE6MjI0KQorCWF0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uLmZyb21Kc29uKEdzb24uamF2YTo4ODgpCisJYXQgY29tLmdvb2dsZS5nc29uLkdzb24uZnJvbUpzb24oR3Nvbi5qYXZhOjg1MykKKwlhdCBjb20uZ29vZ2xlLmdzb24uR3Nvbi5mcm9tSnNvbihHc29uLmphdmE6ODAyKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5qc29uLkpzb24uZGVzZXJpYWxpemUoSnNvbi5qYXZhOjkxKQorCWF0IG9yZy5lY2xpcHNlLmVwcC5pbnRlcm5hbC5sb2dnaW5nLmFlcmkuaWRlLnNlcnZlci5tYXJzLklPLnJlZnJlc2hDb25maWd1cmF0aW9uKElPLmphdmE6NjYpCisJYXQgb3JnLmVjbGlwc2UuZXBwLmludGVybmFsLmxvZ2dpbmcuYWVyaS5pZGUuc2VydmVyLm1hcnMuU2VydmVyQ29ubmVjdGlvbi5zdGFydFVwKFNlcnZlckNvbm5lY3Rpb24uamF2YToxMjQpCisJYXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0SWRsZVNlcnZpY2UkRGVsZWdhdGVTZXJ2aWNlJDEucnVuKEFic3RyYWN0SWRsZVNlcnZpY2UuamF2YTo2MikKKwlhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGVzJDQucnVuKENhbGxhYmxlcy5qYXZhOjEyMikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpCitDYXVzZWQgYnk6IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb246IEV4cGVjdGVkIEJFR0lOX09CSkVDVCBidXQgd2FzIFNUUklORyBhdCBsaW5lIDEgY29sdW1uIDEgcGF0aCAkCisJYXQgY29tLmdvb2dsZS5nc29uLnN0cmVhbS5Kc29uUmVhZGVyLmJlZ2luT2JqZWN0KEpzb25SZWFkZXIuamF2YTozODUpCisJYXQgY29tLmdvb2dsZS5nc29uLmludGVybmFsLmJpbmQuUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeSRBZGFwdGVyLnJlYWQoUmVmbGVjdGl2ZVR5cGVBZGFwdGVyRmFjdG9yeS5qYXZhOjIxMykKKwkuLi4gOSBtb3JlCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5lZ2l0LnVpIDIgMCAyMDIxLTExLTA5IDE1OjE3OjU0LjIxOAorIU1FU1NBR0UgV2FybmluZzogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEhPTUUgaXMgbm90IHNldC4gVGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBHaXQKK3VzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBzdG9yZSByZXBvc2l0b3JpZXM6ICdDOlxVc2Vyc1xGcmFuY2snLiBJZiB0aGlzIGlzCitub3QgY29ycmVjdCBwbGVhc2Ugc2V0IHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXN0YXJ0IEVjbGlwc2UuIE90aGVyd2lzZSBHaXQgZm9yIFdpbmRvd3MgYW5kCitFR2l0IG1pZ2h0IGJlaGF2ZSBkaWZmZXJlbnRseSBzaW5jZSB0aGV5IHNlZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgorVGhpcyB3YXJuaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgb24gdGhlIFRlYW0gPiBHaXQgPiBDb25maXJtYXRpb25zIGFuZCBXYXJuaW5ncyBwcmVmZXJlbmNlIHBhZ2UuCisKKyFFTlRSWSBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aSA0IDAgMjAyMS0xMS0wOSAxNToxODowOC42MzMKKyFNRVNTQUdFIFJlZ2lzdHJ5IERpcmVjdG9yeSBub3QgYXZhaWxhYmxlOiBjOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VcamF2YS1waG90b25cZWNsaXBzZVxwMlxvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZVxwcm9maWxlUmVnaXN0cnkuCishU1RBQ0sgMAoramF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjogUmVnaXN0cnkgRGlyZWN0b3J5IG5vdCBhdmFpbGFibGU6IGM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxqYXZhLXBob3RvblxlY2xpcHNlXHAyXG9yZy5lY2xpcHNlLmVxdWlub3gucDIuZW5naW5lXHByb2ZpbGVSZWdpc3RyeS4KKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkxhenlQcm9maWxlUmVnaXN0cnkuZ2V0UHJvZmlsZU1hcChMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjM2KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLmNvcmUuTGF6eVByb2ZpbGVSZWdpc3RyeS5nZXRQcm9maWxlTWFwKExhenlQcm9maWxlUmVnaXN0cnkuamF2YToyMjcpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuaW50ZXJuYWwuY29yZS5MYXp5UHJvZmlsZVJlZ2lzdHJ5LmNvbnRhaW5zUHJvZmlsZShMYXp5UHJvZmlsZVJlZ2lzdHJ5LmphdmE6MjA4KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5jb250YWluc1Byb2ZpbGUoUHJvZmlsZVByZWZlcmVuY2VzLmphdmE6MTEyKQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIuZW5naW5lLlByb2ZpbGVQcmVmZXJlbmNlcy5sb2FkKFByb2ZpbGVQcmVmZXJlbmNlcy5qYXZhOjI1OSkKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5jcmVhdGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6MzY3KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjApCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMuaW50ZXJuYWxOb2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjYyNikKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKEVjbGlwc2VQcmVmZXJlbmNlcy5qYXZhOjc2MykKKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkVjbGlwc2VQcmVmZXJlbmNlcy5pbnRlcm5hbE5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NjI2KQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoRWNsaXBzZVByZWZlcmVuY2VzLmphdmE6NzYzKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuRWNsaXBzZVByZWZlcmVuY2VzLmludGVybmFsTm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo2MjYpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5FY2xpcHNlUHJlZmVyZW5jZXMubm9kZShFY2xpcHNlUHJlZmVyZW5jZXMuamF2YTo3NjMpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMuZ2V0Tm9kZShSb290UHJlZmVyZW5jZXMuamF2YToxMDUpCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Sb290UHJlZmVyZW5jZXMubm9kZShSb290UHJlZmVyZW5jZXMuamF2YTo4NCkKKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnAyLnJlcG9zaXRvcnkuaGVscGVycy5BYnN0cmFjdFJlcG9zaXRvcnlNYW5hZ2VyLmdldFNoYXJlZFByZWZlcmVuY2VzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YTo1MTgpCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC5wMi5yZXBvc2l0b3J5LmhlbHBlcnMuQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5yZXN0b3JlUmVwb3NpdG9yaWVzKEFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuamF2YToxMDE1KQorCWF0IG9yZy5lY2xpcHNlLmVxdWlub3guaW50ZXJuYWwucDIucmVwb3NpdG9yeS5oZWxwZXJzLkFic3RyYWN0UmVwb3NpdG9yeU1hbmFnZXIuZ2V0S25vd25SZXBvc2l0b3JpZXMoQWJzdHJhY3RSZXBvc2l0b3J5TWFuYWdlci5qYXZhOjQ4MCkKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5wMi5pbnRlcm5hbC5jb3JlLkNhY2hpbmdSZXBvc2l0b3J5TWFuYWdlciRBcnRpZmFjdC5nZXRLbm93blJlcG9zaXRvcmllcyhDYWNoaW5nUmVwb3NpdG9yeU1hbmFnZXIuamF2YTo2MjMpCisJYXQgb3JnLmVjbGlwc2Uub29tcGgucDIuY29yZS5QMlV0aWwuZ2V0S25vd25SZXBvc2l0b3JpZXMoUDJVdGlsLmphdmE6ODQpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAucDIuaW1wbC5QMlRhc2tJbXBsLmlzTmVlZGVkKFAyVGFza0ltcGwuamF2YTo3MDEpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAuaW50ZXJuYWwuY29yZS5TZXR1cFRhc2tQZXJmb3JtZXIuaW5pdE5lZWRlZFNldHVwVGFza3MoU2V0dXBUYXNrUGVyZm9ybWVyLmphdmE6MjI3MykKKwlhdCBvcmcuZWNsaXBzZS5vb21waC5zZXR1cC51aS5TZXR1cFVJUGx1Z2luLnBlcmZvcm1TdGFydHVwKFNldHVwVUlQbHVnaW4uamF2YTo2NzkpCisJYXQgb3JnLmVjbGlwc2Uub29tcGguc2V0dXAudWkuU2V0dXBVSVBsdWdpbi5hY2Nlc3MkNShTZXR1cFVJUGx1Z2luLmphdmE6NDE1KQorCWF0IG9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLlNldHVwVUlQbHVnaW4kMSQxLnJ1bihTZXR1cFVJUGx1Z2luLmphdmE6MjUyKQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubXlseW4vLnRhc2tMaXN0SW5kZXgvc2VnbWVudHNfMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrTGlzdEluZGV4L3NlZ21lbnRzXzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ZjkxMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrTGlzdEluZGV4L3NlZ21lbnRzXzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubXlseW4vLnRhc2tMaXN0SW5kZXgvd3JpdGUubG9jayBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrTGlzdEluZGV4L3dyaXRlLmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrTGlzdEluZGV4L3dyaXRlLmxvY2sKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrcy54bWwuemlwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubXlseW4vLnRhc2tzLnhtbC56aXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmYzliYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluLy50YXNrcy54bWwuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluL3JlcG9zaXRvcmllcy54bWwuemlwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ubXlseW4vcmVwb3NpdG9yaWVzLnhtbC56aXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljMjQyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluL3JlcG9zaXRvcmllcy54bWwuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLm15bHluL3Rhc2tzLnhtbC56aXAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi90YXNrcy54bWwuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTg3OTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5teWx5bi90YXNrcy54bWwuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMS8yMGQ3Y2QwYjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMS8yMGQ3Y2QwYjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmRlYWRkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xLzIwZDdjZDBiOWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMS83MGNjNGVlNTVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMS83MGNjNGVlNTVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjk4YmNiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xLzcwY2M0ZWU1NWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsODEyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKwlpZiggbkVycm9ycyA9PSAtMSApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogU1FMIGVycm9yIHdoZW4gY3JlYXRpbmcgU1FMIHN0YXRlbWVudCFcbiIsIGZ1bmMpOworCWVsc2UgaWYoIG5FcnJvcnMgPT0gLTIgKQorCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZXJyb3IgdG8gRGVyYnkgU2VydmVyIVxuIiwgZnVuYyk7CisJZWxzZSBpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIAorCSAqIAkJCS0xOiBTUUwgaW5zZXJ0IGVycm9yLCBvcgorCSAqIAkJCS0yOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciwgb3IKKwkgKiAJCSAgID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0zOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIGNvbiA9PSBudWxsID8gLTEgOiAtMjsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMTgvNjAzZGQ5NzY5NjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzE4LzYwM2RkOTc2OTYzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWQ3MDAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzE4LzYwM2RkOTc2OTYzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzE5LzMwNDBkODY0MTIzZTAwMWMxMzYzYmViOTMyYWU2M2ExIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xOS8zMDQwZDg2NDEyM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTlkM2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8xOS8zMDQwZDg2NDEyM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpAQCAtMCwwICsxLDc1OCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGE7CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCURhdGFiYXNlTWV0YURhdGEKKwkJCWRibWV0YWRhdGEgPSBjb24uZ2V0TWV0YURhdGEoKTsKKwkJZGJtZXRhZGF0YS4KKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAgCisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMWIvZTAzZWZiZWRkMTNjMDAxYzE1ZTRjN2E3Nzg5MTc3M2YgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFiL2UwM2VmYmVkZDEzYzAwMWMxNWU0YzdhNzc4OTE3NzNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OGZjNWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFiL2UwM2VmYmVkZDEzYzAwMWMxNWU0YzdhNzc4OTE3NzNmCkBAIC0wLDAgKzEsMzIgQEAKKyMgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzOgorIyBleHBlY3RlZCBpbiAvV0VCLUlORi8uCisKKyMjIEdlbmVyYWwgcHJvcGVydGllczoKK0dTX1dvcmtpbmdQYXRoID0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvd29yay1saXZlCisKKyMgR2xlbW1EQiBwcm9wZXJ0aWVzOgorIyBEZXJieUFyY2hpdkRCID0gZGF0YWJhc2UgZm9yIGEgd2hvbGUgQzItQXJjaGl2ZToKK2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieUFyY2hpdkRCCisjZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCMgorc2VydmVySG9zdAk9IC8vbG9jYWxob3N0OjE1MjcvCisKKyMjIEdsZW1tOiBwcm9wZXJ0aWVzIGZvciBsZW1tYXRpemluZzoKKworIyBmbmFtZVNjcmlwdCA9IEdTX1dvcmtpbmdQYXRoICsgZG9HbGVtbQorZm5hbWVTY3JpcHQgPSBkb0dsZW1tCisjIGZuYW1lV2ZzID0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworZm5hbWVXZnMgPSBnbF93ZnNfaW4udHh0CisjIGZuYW1lU2NyaXB0CT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworZm5hbWVTY3JpcHQJPSBkb0dsZW1tCisjIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworIyBsZW0zIGV4cGVjdGVkIHRvIGJlIElTTzg4NTktMSBlbmNvZGVkLgorZm5hbWVMZW1hdGEJPSB0bXAvbGVtMworCisjIyBMb2dpbmc6CisKKyMgZm5hbWVPdXQgPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworI2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy10LmxvZworZm5hbWVPdXQgPSBHbGVtbVNlcnZpY2VzLmxvZworIyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKyNmbmFtZUVyciA9IEdsZW1tU2VydmljZXMtdC5lcnIKK2ZuYW1lRXJyID0gR2xlbW1TZXJ2aWNlcy5lcnIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMWUvMzA1NDIwNDMwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFlLzMwNTQyMDQzMGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDJjN2YKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFlLzMwNTQyMDQzMGEzZTAwMWMxMzYzYmViOTMyYWU2M2ExCkBAIC0wLDAgKzEsNzQ1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMWUvNDAzOWY3MWZhYzJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFlLzQwMzlmNzFmYWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYWViZDkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzFlLzQwMzlmNzFmYWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjc0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8yNy84MGFjZjNlMTRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMjcvODBhY2YzZTE0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNmEwYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMjcvODBhY2YzZTE0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NzUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogc3VibWl0dGVkIGRhdGFiYXNlbmFtZT0nJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMjkvMDBkYWQ0YmQzZjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzI5LzAwZGFkNGJkM2YzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjZmMzIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzI5LzAwZGFkNGJkM2YzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTU4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjI5LjEwLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8yYS81MDE1NTQwZjRmMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMmEvNTAxNTU0MGY0ZjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMjliZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMmEvNTAxNTU0MGY0ZjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MTkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQlTdHJpbmcKKwkJCXByb3BOYW1lID0gIkdsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkJCQorCQkvL2dldFNlcnZsZXRDb250ZXh0KC4pCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworLyoKKwkJSW5wdXRTdHJlYW0KKwkJCS8vaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQkJaW5Qcm9wID0gSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCisJCWlmKCBpblByb3AgPT0gbnVsbCApCisJCQl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCAnJXMnIVxuIiwgZnVuYywgcHJvcE5hbWUpOworCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorKi8JCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoqLworCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgLyogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKi8KKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkvKiovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8yZi9lMDkyNmJiNjNmM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMmYvZTA5MjZiYjYzZjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlMjcxZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMmYvZTA5MjZiYjYzZjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NjAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMjkuMTAuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMy81MDgyNTAxMDgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMy81MDgyNTAxMDgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTgwZWZkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zLzUwODI1MDEwODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjkwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJR2xlbW1TZXJ2aWNlcy5jbGFzcworCQlGaWxlSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IGdldFNlcnZsZXRDb250ZXh0KCkuIFNlcnZsZXRDb250ZXh0LiAgLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOyAvL25ldyBGaWxlSW5wdXQKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzMxLzQwMGUzZDhmZDRiMDAwMWExNWNlYWE1NDgzNGViM2Y3IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zMS80MDBlM2Q4ZmQ0YjAwMDFhMTVjZWFhNTQ4MzRlYjNmNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzc0NDNhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zMS80MDBlM2Q4ZmQ0YjAwMDFhMTVjZWFhNTQ4MzRlYjNmNwpAQCAtMCwwICsxLDg2IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKworCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXA8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPmpzb248L2FydGlmYWN0SWQ+CisJCTxzY29wZT5ydW50aW1lPC9zY29wZT4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPkdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zMi81MDc4NTRjYzI2M2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzIvNTA3ODU0Y2MyNjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkYjE0MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzIvNTA3ODU0Y2MyNjNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NjIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zMy9lMGFhM2Y4YzU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzMvZTBhYTNmOGM1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3NDZlOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzMvZTBhYTNmOGM1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSAJOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aEVuY29kZWQ6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIAkgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgIAkgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgIAkJICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQkJICBsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIGZpbmFsIFN0cmluZyBkYnBhdGhFbmNvZGVkCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCVN0cmluZworCQlkYnBhdGg7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoID0gZGJwYXRoRW5jb2RlZC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzM0LzcwODlhMjFlNWEzZTAwMWMxMDM1YzFlYWYzOGFmNTkwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zNC83MDg5YTIxZTVhM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFlNWNjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zNC83MDg5YTIxZTVhM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApAQCAtMCwwICsxLDk4NCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNS4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIAk6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoRW5jb2RlZDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgCSAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgCSAgIi9ob21lL3VzZXIvS29yQVAvLi4uIgorCSAqICAgICAgICAgCQkgIElNUE9SVEFOVDogZG8gbm90IHVzZSBhICcuJyBmb3IgZW5jb2RpbmcgYW55dGhpbmcgZWxzZSB0aGFuIGEgJy8nLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJCQkgIGxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgZmluYWwgU3RyaW5nIGRicGF0aEVuY29kZWQKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJU3RyaW5nCisJCWRicGF0aDsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IG51bGw7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlkYnBhdGggPSBkYnBhdGhFbmNvZGVkLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCQorCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zOS81MDRjNjFhZjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzkvNTA0YzYxYWY5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNzQxMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvMzkvNTA0YzYxYWY5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MzIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQkvLyBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkOgorCQkJY29uLmNvbW1pdCgpOworCQkJCisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzNiLzAwZDI4NDA1MjczZTAwMWMxMzYzYmViOTMyYWU2M2ExIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zYi8wMGQyODQwNTI3M2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRjMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zYi8wMGQyODQwNTI3M2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpAQCAtMCwwICsxLDg2MiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAgICBjaGVja0RlcmJ5Q29ubmVjdGlvbjoKKwkgKiAKKwkgKiBjaGVjayBpZiBEZXJieSBOZXR3b3JrIFNlcnZlciBpcyBhdmFpbGFibGUuCisJICogUmV0dXJuczogMCAoPU9LKSBvciAtMSAob24gZXJyb3IpLgorCSAqIDA1LjExLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzNjLzcwOWI1ZDc0ODEyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zYy83MDliNWQ3NDgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjY3NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zYy83MDliNWQ3NDgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY5MCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUZpbGVJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzNmL2QwMWYwMjJmMTAyYzAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zZi9kMDFmMDIyZjEwMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmRlZmIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS8zZi9kMDFmMDIyZjEwMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcxNiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCVN0cmluZworCQkJcHJvcE5hbWUgPSAiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQkKKwkJaWYoIGluUHJvcCA9PSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkICclcychXG4iLCBmdW5jLCBwcm9wTmFtZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNC8zMDI0OTc0YzdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNC8zMDI0OTc0YzdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE1ZTViCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80LzMwMjQ5NzRjN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80LzYwMmU4ZDM3OWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80LzYwMmU4ZDM3OWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZWIwZTAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQvNjAyZThkMzc5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MjkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQvNjA2Y2UyYTg5MjFhMDAxYTE5YjI4NzVkZTAyNzJjNmMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzQvNjA2Y2UyYTg5MjFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzOTUwOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNC82MDZjZTJhODkyMWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDI5IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5HbGVtbVNlcnZpY2VzMjwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICA8ZGVzY3JpcHRpb24+R2xlbW1TZXJ2aWNlcyBmw7xyIEtvckFQPC9kZXNjcmlwdGlvbj4KKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80MS8yMDQ5NGYzNTk2M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDEvMjA0OTRmMzU5NjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMmIwMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDEvMjA0OTRmMzU5NjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MzAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCWUxLnAKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80Mi9hMDk3MTE4ZTQ4M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDIvYTA5NzExOGU0ODNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzNTM4MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDIvYTA5NzExOGU0ODNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NzMgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZX0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlbmFtZSIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBzdWJtaXR0ZWQgZGF0YWJhc2VuYW1lPSclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHBvc3RlZCBsaXN0ID0gJyVzJy5cbiIsIGZ1bmMsIGxpc3QpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80OC9hMDIwNGUyZjVlM2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDgvYTAyMDRlMmY1ZTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1YjViZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNDgvYTAyMDRlMmY1ZTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw4MTMgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgdG8gJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gY2hlY2tfRGVyYnlDb25uZWN0aW9uCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorCWlmKCBuRXJyb3JzID09IC0xICkKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBTUUwgZXJyb3Igd2hlbiBjcmVhdGluZyBTUUwgc3RhdGVtZW50IVxuIiwgZnVuYyk7CisJZWxzZSBpZiggbkVycm9ycyA9PSAtMiApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIhXG4iLCBmdW5jKTsKKwllbHNlIGlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAgMDogT0sgb3IgCisJICogCQkJLTE6IGNvbm5lY3Rpb24gZXJyb3IgdG8gRGVyYnkgU2VydmVyLCBvcgorCSAqIAkJCS0yOiBTUUwgZXJyb3IsIG9yCisJICogCQkJLTM6IEkvTyBlcnJvciB3aGVuIHJlYWRpbmcgd2ZzLCBvcgorCSAqIAkJICAgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTM7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gY29uID09IG51bGwgPyAtMSA6IC0yOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80YS8wMDQ3MjYyMzExM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvMDA0NzI2MjMxMTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzY2M3YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvMDA0NzI2MjMxMTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NDYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvYTBmODY0ZWI0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhL2EwZjg2NGViNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YTQxZjcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzRhL2EwZjg2NGViNGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTc1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHBvc3RlZCBsaXN0ID0gJyVzJy5cbiIsIGZ1bmMsIGxpc3QpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80YS9jMDM4MGMyOWE1MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvYzAzODBjMjlhNTJhMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyYjcwZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGEvYzAzODBjMjlhNTJhMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2NTAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80Yy9jMDk2NWU5NjQyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGMvYzA5NjVlOTY0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwZmQ0YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGMvYzA5NjVlOTY0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NjUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VuYW1lIikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEoCisJCQkJCQkJU3RyaW5nIAkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJZmluYWwgU3RyaW5nIGRibmFtZQorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS80ZS9iMDlkZGY1MjVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGUvYjA5ZGRmNTI1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiMmFmMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNGUvYjA5ZGRmNTI1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw4MDggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgdG8gJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gY2hlY2tfRGVyYnlDb25uZWN0aW9uCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIAorCSAqIAkJCS0xOiBTUUwgaW5zZXJ0IGVycm9yLCBvcgorCSAqIAkJCS0yOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciwgb3IKKwkgKiAJCSAgID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0yOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81MS9hMDE1OWY2MDVhM2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTEvYTAxNTlmNjA1YTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZTliNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTEvYTAxNTlmNjA1YTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw5ODggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDUuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJYm9vbGVhbgorCQliRGVyYnlTZXJ2ZXJDb25uZWN0ZWQgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCWJEZXJieVNlcnZlckNvbm5lY3RlZCA9IEdsZW1tREIuY2hlY2tEZXJieUNvbm5lY3Rpb24oKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIAk6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoRW5jb2RlZDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgCSAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgCSAgIi9ob21lL3VzZXIvS29yQVAvLi4uIgorCSAqICAgICAgICAgCQkgIElNUE9SVEFOVDogZG8gbm90IHVzZSBhICcuJyBmb3IgZW5jb2RpbmcgYW55dGhpbmcgZWxzZSB0aGFuIGEgJy8nLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJCQkgIGxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgZmluYWwgU3RyaW5nIGRicGF0aEVuY29kZWQKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJU3RyaW5nCisJCWRicGF0aDsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IG51bGw7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlkYnBhdGggPSBkYnBhdGhFbmNvZGVkLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCQorCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81MS9jMDBkOTQzNjg1MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTEvYzAwZDk0MzY4NTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5ZmU4NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTEvYzAwZDk0MzY4NTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MDIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PFN0cmluZz4KKwkJCQlzZXRQcm9wcyA9IHByb3BzLnN0cmluZ1Byb3BlcnR5TmFtZXMoKTsKKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTQvZDBlNGZmMWY1MmJhMDAxYTFhNjc4NzliMDUyY2M3N2MgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU0L2QwZTRmZjFmNTJiYTAwMWExYTY3ODc5YjA1MmNjNzdjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmU5NjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU0L2QwZTRmZjFmNTJiYTAwMWExYTY3ODc5YjA1MmNjNzdjCkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgPGhlYWQ+CisgIDx0aXRsZT5Xb3JkZm9ybSBTZXJ2aWNlcyAoaW5jbHVkaW5nIEdsZW1tIFNlcnZpY2VzKTwvdGl0bGU+CisgIDwhLS0gbG9hZCBjbGllbnQgamF2YXNjcmlwdCBsaWJyYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvanMva29yYXAtcGx1Z2luLTAuMi5qcyIKKyAgICAgICAgICBkYXRhLXNlcnZlcj0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvIj48L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgIDxzY3JpcHQ+CisgICAgICAgbGV0IGRhdGEgPSB7CisgICAgICAgICAnYWN0aW9uJyA6ICdwaXBlJywKKyAgICAgICAgICdzZXJ2aWNlJyA6ICdodHRwOi8vYzByNGZ0Lmlkcy1tYW5uaGVpbS5kZTo0MDkxMy93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVC93Zm9ybVNlcnZpY2VzL3F1ZXJ5JworICAgICAgIH07CisKKyAgICAgICBmdW5jdGlvbiBwbHVnaW5pdCAocCkgeworICAgICAgICAgcC5vbk1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAgaWYgKG1zZy5rZXkgPT0gJ2dsZW1tJykgeworICAgICAgICAgICAgIGlmIChtc2cudmFsdWUpIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2FkZCc7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgZGF0YVsnam9iJ10gPSAnZGVsJzsKKyAgICAgICAgICAgICB9OworICAgICAgICAgICAgIEtvckFQbHVnaW4uc2VuZE1zZyhkYXRhKTsKKyAgICAgICAgICAgfTsKKyAgICAgICAgIH07CisgICAgICAgfTsKKyAgICAgPC9zY3JpcHQ+CisgICA8L2JvZHk+Cis8L2h0bWw+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTUvMjA5MDUyYjc0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU1LzIwOTA1MmI3NDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDFiYzEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU1LzIwOTA1MmI3NDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTY5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZX0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAlmaW5hbCBTdHJpbmcgZGJuYW1lCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBzdWJtaXR0ZWQgZGF0YWJhc2VuYW1lPSclcycuXG4iLCBmdW5jLCBkYm5hbWUpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHBvc3RlZCBsaXN0ID0gJyVzJy5cbiIsIGZ1bmMsIGxpc3QpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTUvZjA2MWFiZWMwMzhmMDAxYTFjYjhhMWVhMDgzNDM4YWUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU1L2YwNjFhYmVjMDM4ZjAwMWExY2I4YTFlYTA4MzQzOGFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNGYyYjAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzU1L2YwNjFhYmVjMDM4ZjAwMWExY2I4YTFlYTA4MzQzOGFlCkBAIC0wLDAgKzEsNzIgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgorICA8IS0tICA+cGFja2FnaW5nPndhcjwvcGFja2FnaW5nLS0+CisgIDxuYW1lPkpzb24gVGVzdCBNZXRob2RzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGZvciBKc29uIFBhcnNpbmc8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuanNvbjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+SnNvblRyYXZlcnNlPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkdsZW1tQ2xpZW50PC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+VGVzdEdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81OS9iMGM3Y2ZlZjgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTkvYjBjN2NmZWY4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4N2M5NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNTkvYjBjN2NmZWY4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2OTEgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNWIvNjAzYmExZmY5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzViLzYwM2JhMWZmOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjYxYjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzViLzYwM2JhMWZmOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCkBAIC0wLDAgKzEsNTUgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD5HbGVtbVNlcnZpY2VzMjwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisgIDxuYW1lPkdsZW1tU2VydmljZXM8L25hbWU+CisgIAorICA8ZGVzY3JpcHRpb24+UkVTVGZ1bGwgR2xlbW1TZXJ2aWNlcyBmw7xyIEtvckFQPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjU8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8IS0tIGh0dHBzOi8vbXZucmVwb3NpdG9yeS5jb20vYXJ0aWZhY3QvamF2YXgud3MucnMvamF2YXgud3MucnMtYXBpIC0tPgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXgud3MucnM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amF2YXgud3MucnMtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuMDwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDxmaW5hbE5hbWU+R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzViL2UwZGZiNzgzMGYzZTAwMWMxMzYzYmViOTMyYWU2M2ExIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81Yi9lMGRmYjc4MzBmM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjNjYzdiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81Yi9lMGRmYjc4MzBmM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpAQCAtMCwwICsxLDc0NiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS81ZS9mMDA2ODcwNGFjM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNWUvZjAwNjg3MDRhYzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzZDAyNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNWUvZjAwNjg3MDRhYzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MzkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzYxL2MwMTczYzEyYmU4ZTAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82MS9jMDE3M2MxMmJlOGUwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTZlYjdlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82MS9jMDE3M2MxMmJlOGUwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDY3IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5qc29uPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+VGVzdEdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82Mi9hMDk4MDIzMDEzM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjIvYTA5ODAyMzAxMzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3ZDliOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNjIvYTA5ODAyMzAxMzNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NzAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlEYXRhYmFzZU1ldGFEYXRhCisJCQlkYm1ldGFkYXRhID0gY29uLmdldE1ldGFEYXRhKCk7CisJCWRibWV0YWRhdGEuCisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzY1LzUwYmI4YTZhYTUyYTAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82NS81MGJiOGE2YWE1MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzMwNjdkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82NS81MGJiOGE2YWE1MmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDY3NSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCXByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCXRyeSB7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfTsKKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzY5LzIwYThhNGNiNTkzZTAwMWMxMDM1YzFlYWYzOGFmNTkwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82OS8yMGE4YTRjYjU5M2UwMDFjMTAzNWMxZWFmMzhhZjU5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDA2MGEwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82OS8yMGE4YTRjYjU5M2UwMDFjMTAzNWMxZWFmMzhhZjU5MApAQCAtMCwwICsxLDgwOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAgICBjaGVja0RlcmJ5Q29ubmVjdGlvbjoKKwkgKiAKKwkgKiBjaGVjayBpZiBEZXJieSBOZXR3b3JrIFNlcnZlciBpcyBhdmFpbGFibGUuCisJICogUmV0dXJuczogMCAoPU9LKSBvciAtMSAob24gZXJyb3IpLgorCSAqIDA1LjExLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmEvYjAyMzMzYzI0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZhL2IwMjMzM2MyNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NzVlYzQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZhL2IwMjMzM2MyNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsODYgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD5HbGVtbVNlcnZpY2VzPC9hcnRpZmFjdElkPgorICA8IS0tdmVyc2lvbj4wLjItVGVzdDwvdmVyc2lvbiAtLT4KKyAgPHZlcnNpb24+MC4yLWxpdmU8L3ZlcnNpb24+CisgIAorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzIChMaXZlLUtvbmZpZ3VyYXRpb24pPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUCAoTGl2ZS1Lb25maWd1cmF0aW9uKTwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKworCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPkdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82YS9jMGFiNTFiYzgwMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmEvYzBhYjUxYmM4MDJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2MmY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmEvYzBhYjUxYmM4MDJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2ODggQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUZpbGVJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gZ2V0U2VydmxldENvbnRleHQoKS4gU2VydmxldENvbnRleHQuICAuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7IC8vbmV3IEZpbGVJbnB1dAorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmMvMjA1M2U2NzA1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZjLzIwNTNlNjcwNTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZDdkODQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZjLzIwNTNlNjcwNTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSO+/vXVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZkLzMwMTRmN2VhMTEzZTAwMWMxMzYzYmViOTMyYWU2M2ExIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82ZC8zMDE0ZjdlYTExM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE5ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS82ZC8zMDE0ZjdlYTExM2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpAQCAtMCwwICsxLDc1NSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGE7CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlmaW5hbCBpbnQgbWF4TGVtbWFTaXplCQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlmaW5hbCBpbnQgbWF4V2ZTaXplCQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlEYXRhYmFzZU1ldGFEYXRhCisJCQlkYm1ldGFkYXRhID0gY29uLmdldE1ldGFEYXRhKCk7CisJCWRibWV0YWRhdGEuCisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmUvMjBhYmMyZTNkMTNjMDAxYzE1ZTRjN2E3Nzg5MTc3M2YgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZlLzIwYWJjMmUzZDEzYzAwMWMxNWU0YzdhNzc4OTE3NzNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTU1MjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZlLzIwYWJjMmUzZDEzYzAwMWMxNWU0YzdhNzc4OTE3NzNmCkBAIC0wLDAgKzEsMzEgQEAKKyMgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzOgorIyBleHBlY3RlZCBpbiAvV0VCLUlORi8uCisKKyMjIEdlbmVyYWwgcHJvcGVydGllczoKK0dTX1dvcmtpbmdQYXRoID0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvd29yay1saXZlCisKKyMgR2xlbW1EQiBwcm9wZXJ0aWVzOgorZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCCisjZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCMgorc2VydmVySG9zdAk9IC8vbG9jYWxob3N0OjE1MjcvCisKKyMjIEdsZW1tOiBwcm9wZXJ0aWVzIGZvciBsZW1tYXRpemluZzoKKworIyBmbmFtZVNjcmlwdCA9IEdTX1dvcmtpbmdQYXRoICsgZG9HbGVtbQorZm5hbWVTY3JpcHQgPSBkb0dsZW1tCisjIGZuYW1lV2ZzID0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworZm5hbWVXZnMgPSBnbF93ZnNfaW4udHh0CisjIGZuYW1lU2NyaXB0CT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworZm5hbWVTY3JpcHQJPSBkb0dsZW1tCisjIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworIyBsZW0zIGV4cGVjdGVkIHRvIGJlIElTTzg4NTktMSBlbmNvZGVkLgorZm5hbWVMZW1hdGEJPSB0bXAvbGVtMworCisjIyBMb2dpbmc6CisKKyMgZm5hbWVPdXQgPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworI2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy10LmxvZworZm5hbWVPdXQgPSBHbGVtbVNlcnZpY2VzLmxvZworIyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKyNmbmFtZUVyciA9IEdsZW1tU2VydmljZXMtdC5lcnIKK2ZuYW1lRXJyID0gR2xlbW1TZXJ2aWNlcy5lcnIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNmYvZTBkNDRhOWFiZDhlMDAxYTFjYjhhMWVhMDgzNDM4YWUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZmL2UwZDQ0YTlhYmQ4ZTAwMWExY2I4YTFlYTA4MzQzOGFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTM5YzkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzZmL2UwZDQ0YTlhYmQ4ZTAwMWExY2I4YTFlYTA4MzQzOGFlCkBAIC0wLDAgKzEsNjIgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgorICA8IS0tICA+cGFja2FnaW5nPndhcjwvcGFja2FnaW5nLS0+CisgIDxuYW1lPkpzb24gVGVzdCBNZXRob2RzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGZvciBKc29uIFBhcnNpbmc8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPlRlc3RHbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNy9kMGJjZTUzNmFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNy9kMGJjZTUzNmFjMmEwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTIyYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83L2QwYmNlNTM2YWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjc3IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLyoKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83MC85MGZmYjk2YjgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzAvOTBmZmI5NmI4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMDliYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzAvOTBmZmI5NmI4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2OTIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlGaWxlSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCUZpbGVJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gZ2V0U2VydmxldENvbnRleHQoKS4gU2VydmxldENvbnRleHQuICAuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7IC8vbmV3IEZpbGVJbnB1dAorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzEvNTAzYTU1MjE3ZTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcxLzUwM2E1NTIxN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZmRkY2MKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcxLzUwM2E1NTIxN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83MS85MGE5MmIzNjRkM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzEvOTBhOTJiMzY0ZDNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjOTVlZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzEvOTBhOTJiMzY0ZDNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NzUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSAKKwkJYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZm91dC5wcmludGYoIkluZm8gOiAlczogc2VsZWN0ZWQgZGF0YWJhc2UgcGF0aCA9ICclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHdvcmtpbmcgZGlyZWN0b3J5ID0gJyVzJy5cbiIsIGZ1bmMsIEdTX1dvcmtpbmdQYXRoKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzIvZDAyN2FlMGM1NDNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcyL2QwMjdhZTBjNTQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjVjYTMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzcyL2QwMjdhZTBjNTQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzIwIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm86ICVzOiBkZXJieURCVVJMPSclcycuXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzc0LzUwOTBjNzcwODAzYzAwMWMxNWU0YzdhNzc4OTE3NzNmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83NC81MDkwYzc3MDgwM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzRlNGFkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83NC81MDkwYzc3MDgwM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpAQCAtMCwwICsxLDIyIEBACisjIFdvcmRmb3JtU2VydmljZXMgcHJvcGVydGllczoKKyMgZXhwZWN0ZWQgaW4gL1dFQi1JTkYvLgorCisjIyBHZW5lcmFsIHByb3BlcnRpZXM6CitHU19Xb3JraW5nUGF0aCA9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL3dvcmstbGl2ZQorCisjIyBMb2dpbmc6CisKKyMgZm5hbWVPdXQgPSBHU19Xb3JraW5nUGF0aCArICIvV2Zvcm1tU2VydmljZXMubG9nIjsKKyNmbmFtZU91dCA9IFdmb3JtU2VydmljZXMtdC5sb2cKK2ZuYW1lT3V0ID0gV2Zvcm1TZXJ2aWNlcy5sb2cKKyMgZm5hbWVFcnIgPSBHU19Xb3JraW5nUGF0aCArICIvV2Zvcm1TZXJ2aWNlcy5lcnIiOworI2ZuYW1lRXJyID0gV2Zvcm1TZXJ2aWNlcy10LmVycgorZm5hbWVFcnIgPSBXZm9ybVNlcnZpY2VzLmVycgorCisjIyBDb21tdW5pY2F0aW5nIHdpdGggdGhlIEdsZW1tU2VydmljZXMKK1VSTEdsZW1tU2VydmVyCQk9IGh0dHA6Ly9jMHI0ZnQKK0dsZW1tUG9ydAkJCT0gNDA5MTMKKyNVUkxHbGVtbVNlcnZpY2VzCT0gR2xlbW1TZXJ2aWNlcy0wLjItVGVzdAorVVJMR2xlbW1TZXJ2aWNlcwk9IEdsZW1tU2VydmljZXMtMC4xLVNOQVBTSE9UCitMZW1tYVJlcXVlc3RQYXRoCT0gaW5kZXgvaW5mby9sZW1tYQorCQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvNzYvODA5YjcyM2M5MzFhMDAxYTE5YjI4NzVkZTAyNzJjNmMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzc2LzgwOWI3MjNjOTMxYTAwMWExOWIyODc1ZGUwMjcyYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzc2LzgwOWI3MjNjOTMxYTAwMWExOWIyODc1ZGUwMjcyYzZjCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzc3L2MwNDZjNDIyOTYzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Ny9jMDQ2YzQyMjk2M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzk1YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83Ny9jMDQ2YzQyMjk2M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDczMSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS83YS84MDVmZTQ1ZjBhM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvN2EvODA1ZmU0NWYwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkNTc1NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvN2EvODA1ZmU0NWYwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw5ODQgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSAJOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aEVuY29kZWQ6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIAkgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgIAkgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgIAkJICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQkJICBsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIGZpbmFsIFN0cmluZyBkYnBhdGhFbmNvZGVkCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCVN0cmluZworCQlkYnBhdGg7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoID0gZGJwYXRoRW5jb2RlZC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwkKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvN2IvNDA1YTMxZjczMzkwMDAxYTE4N2RmYWRkMzFlMDJjZGYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzdiLzQwNWEzMWY3MzM5MDAwMWExODdkZmFkZDMxZTAyY2RmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNWIxM2MKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzdiLzQwNWEzMWY3MzM5MDAwMWExODdkZmFkZDMxZTAyY2RmCkBAIC0wLDAgKzEsMjE0IEBACisvKiAKKyAqIFNldCBvZiBtZXRob2RzIGZvciB0ZXN0aW5nIEpzb24gcGFyc2luZyBtZXRob2RzLgorICogCisgKiAwMy4wNC4yMC9GQgorICovCisKK3BhY2thZ2UgdGVzdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworCitpbXBvcnQgZGUua29yYXAuanNvbi5Kc29uVHJhdmVyc2U7CitpbXBvcnQgZGUua29yYXAuanNvbi5UcmF2ZXJzZWRQYXRoOworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudC5HbGVtbUNsaWVudDsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy5Xb3JkZm9ybVNlcnZpY2VzOworCitwdWJsaWMgY2xhc3MgVGVzdEpzb24KKworeworCXN0YXRpYyBTdHJpbmcgaW5wdXRGaWxlbmFtZSA9ICJxdWVyeS5pbi5wcmV0dHkuanNvbiI7CisJc3RhdGljIFN0cmluZyBvdXRwdXRGaWxlbmFtZSA9ICJxdWVyeS5vdXQucHJldHR5Lmpzb24iOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4gYlNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlcyA9IHRydWU7CisJCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKKwkKKwl7CisJRmlsZQorCQlpbkZpbGUgPSBuZXcgRmlsZShpbnB1dEZpbGVuYW1lKTsKKwlGaWxlCisJCW91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXRGaWxlbmFtZSk7CisgICAgT2JqZWN0TWFwcGVyCisJCW9iak1hcHBlciA9IG51bGw7CisJSnNvbk5vZGUKKwkJanNvbk5vZGUgPSBudWxsOworCVRyYXZlcnNlZFBhdGgKKwkJdFBhdGgJID0gbnVsbDsKKwlpbnQKKwkJbW9kZQkgPSBKc29uVHJhdmVyc2UuUkVXUklURTsgCS8vIEpzb25UcmF2ZXJzZS5SRVdSSVRFIG9yIFJFV1JJVEVfRVhQCisJCisJaWYoIGJTaW11bGF0ZVdvcmRmb3JtU2VydmljZXMgKQorCXsKKwkJU3lzdGVtLm91dC5wcmludGYoIlRlc3RKc29uOiBzdGFydGluZyBzaW11bGF0aW9uIG9mIFdvcmRmb3JtU2VydmljZXMuLi5cbiIpOworCQlzaW11bGF0ZVdvcmRmb3JtU2VydmljZXMoaW5wdXRGaWxlbmFtZSwgb3V0cHV0RmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCQorCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjogdGVzdCBvbiAnJXMnLi4uXG4iLCBpbnB1dEZpbGVuYW1lKTsKKwkKKwlvYmpNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisJCisJLy8gZ2V0IGZ1bGwgcXVlcnkgYXMgYSBKc29uTm9kZSB0cmVlOgorCXRyeSB7CisJCS8vIGdldCBmdWxsIHF1ZXJ5IGZyb20gZmlsZSBhcyBhIEpzb25Ob2RlIHRyZWU6CisJCWpzb25Ob2RlID0gb2JqTWFwcGVyLnJlYWRUcmVlKGluRmlsZSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjogcmVhZGluZyBmcm9tIGlucHV0IGZpbGU6IG9rLlxuIik7CisJCQorCQkvLyB0cmF2ZXJzZSBxdWVyeSBhbmQgY29sbGVjdCBsZW1tYSBzdWJxdWVyaWVzIGluIGEgVHJhdmVyc2VkUGF0aCBvYmplY3Q6CisJCXRQYXRoID0gbmV3IFRyYXZlcnNlZFBhdGgob2JqTWFwcGVyKTsKKwkJSnNvblRyYXZlcnNlLnRyYXZlcnNlSnNvblRyZWUoanNvbk5vZGUsIHRQYXRoLCBKc29uVHJhdmVyc2UuQ09MTEVDVCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogVGVzdEpzb246IGdlZnVuZGVuZSBMZW1tYXRhOiAjOiAlZCwgbGlzdDogJyVzJy5cbiIsIHRQYXRoLmdldExlbW1hQ291bnQoKSwgdFBhdGguZ2V0TGVtbWF0YSgpKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkvLyBFeGl0IGlmIG5vIGxlbW1hIHN1YnF1ZXJpZXMgZm91bmQ6CisJaWYoIHRQYXRoID09IG51bGwgfHwgdFBhdGguZ2V0TGVtbWFDb3VudCgpID09IDAgKQorCQl7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJUZXN0SnNvbjoga2VpbmUgbGVtbWF0YSBnZWZ1bmRlbiA+IFJld3JpdGUg/GJlcnNwcmluZ2VuLlxuIik7CisJCXJldHVybjsKKwkJfQorCisJLy8gQ2FsbCBHbGVtbVNlcnZpY2VzIHRvIHJlc29sdmUgbGVtbWEtU3VicXVlcmllcy4KKwkvLyBUaGlzIHJldHVybnMgZm9yIGVhY2ggbGVtbWEgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIHdvcmRmb3JtIGluc3RhbmNpYXRpb25zCisJLy8gKD0gaW5zdGFudGlhdGlvbiBsaXN0KS4gCisJLy8gVGhpcyBsaXN0IGlzIHN1Ym1pdHRlZCB0byB0cmF2ZXJzSnNvblRyZWUoKSB3aXRoIHRoZSB1c2Ugb2YgdGhlIHRQYXRoIG9iamVjdC4KKwkKKwkvLyBTaW11bGF0ZXMgYnVpbGRpbmcgb2YgZXhwYW5zaW9uIGxpc3RzLCBzdG9yaW5nIHRoZW0gaW4gdFBhdGg6CisJaWYoIG1vZGUgPT0gSnNvblRyYXZlcnNlLlJFV1JJVEUpCisJCXsKKwkJc2ltdWxhdGVHbGVtbVNlcnZpY2VzQ29ubmVjdCh0UGF0aCk7CisJCXNpbXVsYXRlR2xlbW1TZXJ2aWNlcyh0UGF0aCk7CisJCX0KKwllbHNlCisJCXNpbXVsYXRlR2xlbW1TZXJ2aWNlc1dmcyh0UGF0aCk7CisJCisJLy8gUmV3cml0ZSBLb3JhbFF1ZXJ5OiB1c2UgZWl0aGVyIEpzb25UcmF2ZXJzZS5SRVdSSVRFIG9yIC5SRVdSSVRFX0VYUDoKKwkKKwlKc29uVHJhdmVyc2UudHJhdmVyc2VKc29uVHJlZShqc29uTm9kZSwgdFBhdGgsIG1vZGUpOworCQkKKwkvLyByZXR1cm4gcmV3cml0dG4gSnNvbiBUcmVlIHRvIGZpbGU6CisJdHJ5IHsKKwkJb2JqTWFwcGVyLndyaXRlcldpdGhEZWZhdWx0UHJldHR5UHJpbnRlcigpLndyaXRlVmFsdWUob3V0RmlsZSwganNvbk5vZGUpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJfSAvLyBtYWluCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHNpbXVsYXRlV29yZGZvcm1TZXJ2aWNlczoKKwkgKiAKKwkgKiAtIGNhbGxzIHNhbWUgbWV0aG9kZSB0byBwYXJzZSBhbmQgcmV3cml0ZSBLb3JhbFF1ZXJ5IHRoYXQgd29yZGZvcm1TZXJ2aWNlcyBkby4KKwkgKiAKKwkgKiAyNC4wNC4yMC9GQiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJc3RhdGljIHZvaWQgc2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzKFN0cmluZyBpbnB1dEZpbGVuYW1lLCBTdHJpbmcgb3V0cHV0RmlsZW5hbWUpICAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAic2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzIjsKKwlTdHJpbmcKKwkJcXVlcnkJCT0gbnVsbCwKKwkJbmV3UXVlcnkJPSBudWxsOworCisgICAgdHJ5IHsKKwkJcXVlcnkgPSBVdGlscy5yZWFkRnJvbUlucHV0U3RyZWFtKCIuLyIgKyBpbnB1dEZpbGVuYW1lKTsKKwkJfSAKKyAgICBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybjsKKwkJfQorICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNlbmRpbmcgcXVlcnkgdG8gV29yZGZvcm1TZXJ2aWNlcy4uLlxuIiwgIGZ1bmMpOworICAgIAorCW5ld1F1ZXJ5ID0gV29yZGZvcm1TZXJ2aWNlcy5kb1BPU1RfaGFuZGxlV29yZGZvcm1RdWVyaWVzKHF1ZXJ5KSA7CisJCQorICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlY2VpdmluZyByZXdyaXR0ZW4gcXVlcnkgZnJvbSBXb3JkZm9ybVNlcnZpY2VzLi4uXG4iLCAgZnVuYyk7CisgICAgCisgICAgVXRpbHMud3JpdGVUb091dHB1dFN0cmVhbSgiLi8iICsgb3V0cHV0RmlsZW5hbWUsIG5ld1F1ZXJ5KTsKKworCX0gLy8gc2ltdWxhdGVXb3JkZm9ybVNlcnZpY2VzCisJCisJCisJLyogc2ltdWxhdGVHbGVtbVNlcnZpY2VzQ2xpZW50CisJICogCisJICogMTQuMDQuMjAvRkIKKwkgKiAKKwkgKi8KKwkKKwlzdGF0aWMgaW50IHNpbXVsYXRlR2xlbW1TZXJ2aWNlc0Nvbm5lY3QoVHJhdmVyc2VkUGF0aCB0UGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAic2ltdWxhdGVHbGVtbVNlcnZpY2VzQ29ubmVjdCI7CisJR2xlbW1DbGllbnQKKwkJZ2xlbW1DbGllbnQgPSBuZXcgR2xlbW1DbGllbnQoKTsKKwkKKwlnbGVtbUNsaWVudC5HbGVtbUNvbm5lY3QoKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgIGZ1bmMpOworCQorCXJldHVybiAwOworCX0gLy8gc2ltdWxhdGVHbGVtbVNlcnZpY2VzQ2xpZW50CisJCisJLyogc2ltdWxhdGVHbGVtbVNlcnZpY2VzCisJICogCisJICogaW5wdXQ6IGxpc3Qgb2YgbGVtbWF0YQorCSAqIG91dHB1dDogbGlzdCBvZiBsZW1tYXRhIChzYW1lIG9yZGVyKSB3aXRoIHJlZmVyZW5jZXMgdG8gZXhwYW5zaW9uIGxpc3RzLgorCSAqIDA3LjA0LjIwL0ZCCisJICovCisJCisJc3RhdGljIHZvaWQgc2ltdWxhdGVHbGVtbVNlcnZpY2VzKFRyYXZlcnNlZFBhdGggdFBhdGgpCisJCisJeworCQlmb3IoaW50IGk9MDsgaTx0UGF0aC5nZXRMZW1tYUNvdW50KCk7IGkrKykKKwkJCXsKKwkJCXRQYXRoLnNldFJlZigicmVmLSIgKyB0UGF0aC5nZXRMZW1tYShpKSArICI6IiArIGkpOworCQkJfQorCQorCVN5c3RlbS5vdXQucHJpbnRmKCJ0UGF0aC5yZWZzOiAjPSVkIGxpc3Q9JyVzJy5cbiIsIHRQYXRoLmdldFJlZnNDb3VudCgpLCB0UGF0aC5nZXRSZWZzYXNTdHJpbmcoKSk7CisJCQorCX0gLy8gc2ltdWxhdGVHbGVtbVNlcnZpY2VzCisJCisJLyogc2ltdWxhdGVHbGVtbVNlcnZpY2VzV2ZzCisJICogCisJICogaW5wdXQ6IGxpc3Qgb2YgbGVtbWF0YQorCSAqIG91dHB1dDogbGlzdCBvZiBleHBhbnNpb24gbGlzdHMgKD0gd29yZGZvcm1zKSwgc2FtZSBvcmRlci4KKwkgKiAwOC4wNC4yMC9GQgorCSAqLworCQorCXN0YXRpYyB2b2lkIHNpbXVsYXRlR2xlbW1TZXJ2aWNlc1dmcyhUcmF2ZXJzZWRQYXRoIHRQYXRoKQorCQorCXsKKwkJZm9yKGludCBpPTA7IGk8dFBhdGguZ2V0TGVtbWFDb3VudCgpOyBpKyspCisJCQl7CisJCQlMaXN0PFN0cmluZz4KKwkJCQlleHBMaXN0ID0gbmV3IEFycmF5TGlzdChpKzEpOworCQkJCisJCQlmb3IoaW50IGo9MDsgajxpKzE7IGorKykKKwkJCQl7CisJCQkJZXhwTGlzdC5hZGQodFBhdGguZ2V0TGVtbWEoaSkgKyBqKTsKKwkJCQl9CisJCQkKKwkJCXRQYXRoLmFkZEV4cExpc3QoZXhwTGlzdCk7IAorCQkJfQorCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1Zzogc2ltdWxhdGVkR2xlbW1TZXJ2aWNlc1dmczogJWQgZXhwYW5zaW9uIGxpc3RzIGFkZGVkLlxuIiwgdFBhdGguZ2V0TGVtbWFDb3VudCgpKTsKKwkJCisJfSAvLyBzaW11bGF0ZUdsZW1tU2VydmljZXNXZnMKKwkKKwkJCit9IC8vIFRlc3RKc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Mi85MDU2ZWY3ZjgxMmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODIvOTA1NmVmN2Y4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzMzUzNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODIvOTA1NmVmN2Y4MTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw2OTAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzgzLzIwN2RhNGJiOWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84My8yMDdkYTRiYjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWNhYzJiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84My8yMDdkYTRiYjlhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDczOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKworCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkOgorCQkJY29uLmNvbW1pdCgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODUvYTBlODRmYWQxMjhmMDAxYTFjYjhhMWVhMDgzNDM4YWUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg1L2EwZTg0ZmFkMTI4ZjAwMWExY2I4YTFlYTA4MzQzOGFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWUzZGYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg1L2EwZTg0ZmFkMTI4ZjAwMWExY2I4YTFlYTA4MzQzOGFlCkBAIC0wLDAgKzEsODIgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgorICA8IS0tICA+cGFja2FnaW5nPndhcjwvcGFja2FnaW5nLS0+CisgIDxuYW1lPkpzb24gVGVzdCBNZXRob2RzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGZvciBKc29uIFBhcnNpbmc8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuanNvbjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+SnNvblRyYXZlcnNlPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkdsZW1tQ2xpZW50PC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD53Zm9ybVNlcnZpY2VzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+VGVzdEdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84NS9mMDk1ZmRjYTk5M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODUvZjA5NWZkY2E5OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0MzVkYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODUvZjA5NWZkY2E5OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MjkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg2L2IwMmMwYzQ5NTIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Ni9iMDJjMGM0OTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWM5YTk1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Ni9iMDJjMGM0OTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk4MiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODcvMjA0YjgwZmY4NzJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg3LzIwNGI4MGZmODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYTFiMjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg3LzIwNGI4MGZmODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzE1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJU3RyaW5nCisJCQlwcm9wTmFtZSA9ICJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisJCQorCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyFcbiIsIGZ1bmMsIHByb3BOYW1lKTsKKwkJCX0KKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvODkvNTA2MTUwY2FiZDhlMDAxYTFjYjhhMWVhMDgzNDM4YWUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg5LzUwNjE1MGNhYmQ4ZTAwMWExY2I4YTFlYTA4MzQzOGFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkN2ZiNjQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzg5LzUwNjE1MGNhYmQ4ZTAwMWExY2I4YTFlYTA4MzQzOGFlCkBAIC0wLDAgKzEsNjYgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgorICA8IS0tICA+cGFja2FnaW5nPndhcjwvcGFja2FnaW5nLS0+CisgIDxuYW1lPkpzb24gVGVzdCBNZXRob2RzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGZvciBKc29uIFBhcnNpbmc8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXA8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPmpzb248L2FydGlmYWN0SWQ+CisJPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgCisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHNvdXJjZT4xLjg8L3NvdXJjZT4KKyAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KKyAgICAgICAgICA8d2FyU291cmNlRGlyZWN0b3J5PldlYkNvbnRlbnQ8L3dhclNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+VGVzdEdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS84Yy82MDQzODhmZDU5M2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOGMvNjA0Mzg4ZmQ1OTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4MmRlMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOGMvNjA0Mzg4ZmQ1OTNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw4MDUgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTAvNjBmMGQ0YTM0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzkwLzYwZjBkNGEzNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDdjNjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzkwLzYwZjBkNGEzNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTY5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCWZpbmFsIFN0cmluZyBkYm5hbWUKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN1Ym1pdHRlZCBkYXRhYmFzZW5hbWU9JyVzJy5cbiIsIGZ1bmMsIGRibmFtZSk7CisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcG9zdGVkIGxpc3QgPSAnJXMnLlxuIiwgZnVuYywgbGlzdCk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85MC85MDAwMzlhYmI0M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTAvOTAwMDM5YWJiNDNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0ZWNhMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTAvOTAwMDM5YWJiNDNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3NDQgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzkxLzEwZjE0NzgwNGMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85MS8xMGYxNDc4MDRjM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk4ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85MS8xMGYxNDc4MDRjM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk3NCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk1L2YwOTZhNmY2NTUzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85NS9mMDk2YTZmNjU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ5ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85NS9mMDk2YTZmNjU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk4NiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIAk6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoRW5jb2RlZDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgCSAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgCSAgIi9ob21lL3VzZXIvS29yQVAvLi4uIgorCSAqICAgICAgICAgCQkgIElNUE9SVEFOVDogZG8gbm90IHVzZSBhICcuJyBmb3IgZW5jb2RpbmcgYW55dGhpbmcgZWxzZSB0aGFuIGEgJy8nLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJCQkgIGxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgZmluYWwgU3RyaW5nIGRicGF0aEVuY29kZWQKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJU3RyaW5nCisJCWRicGF0aDsKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IG51bGw7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlkYnBhdGggPSBkYnBhdGhFbmNvZGVkLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCQorCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTYvZjA3YzQyNDI3ZTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk2L2YwN2M0MjQyN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODcwZDUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk2L2YwN2M0MjQyN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzI4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOTgvNjBjNmUxM2UxMjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk4LzYwYzZlMTNlMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmUwZTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5Lzk4LzYwYzZlMTNlMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzE5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJU3RyaW5nCisJCQlwcm9wTmFtZSA9ICJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJCQkKKwkJLy9nZXRTZXJ2bGV0Q29udGV4dCguKQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKworCQlJbnB1dFN0cmVhbQorCQkJLy9pblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisJCQlpblByb3AgPSBIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisKKwkJaWYoIGluUHJvcCA9PSBudWxsICkKKwkJCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkICclcychXG4iLCBmdW5jLCBwcm9wTmFtZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qKi8KKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJIC8qIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICovCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJLyoqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvOWUvNDBkNGIxYzgwNDhmMDAxYTFjYjhhMWVhMDgzNDM4YWUgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzllLzQwZDRiMWM4MDQ4ZjAwMWExY2I4YTFlYTA4MzQzOGFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NzQyMWIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzllLzQwZDRiMWM4MDQ4ZjAwMWExY2I4YTFlYTA4MzQzOGFlCkBAIC0wLDAgKzEsNzcgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgorICA8IS0tICA+cGFja2FnaW5nPndhcjwvcGFja2FnaW5nLS0+CisgIDxuYW1lPkpzb24gVGVzdCBNZXRob2RzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlRlc3RzIGZvciBKc29uIFBhcnNpbmc8L2Rlc2NyaXB0aW9uPgorICAKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4zLjguMTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisgICA8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+Mi45LjY8L3ZlcnNpb24+CisJICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkJPGdyb3VwSWQ+ZGUua29yYXAuanNvbjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+SnNvblRyYXZlcnNlPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkdsZW1tQ2xpZW50PC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9kZXBlbmRlbmN5PgorCTxkZXBlbmRlbmN5PgorCQk8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5UZXN0R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5LzllLzkwYTQwYzA1NTIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85ZS85MGE0MGMwNTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzcyZWRkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS85ZS85MGE0MGMwNTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk3OCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYTEvZjAwZjQ4ZTQ4NzJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2ExL2YwMGY0OGU0ODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjY3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2ExL2YwMGY0OGU0ODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzA5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQlTZXQ8RW50cnk8T2JqZWN0LE9iamVjdD4+CisJCQkJcHJvcHNTZXQgPSBwcm9wcy5lbnRyeVNldCgpOworCQkJCisJCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BFbnRyeSA6IHByb3BzU2V0KQorCQkJCXsKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wICVzID0gJyVzJy5cbiIsIGZ1bmMsIHByb3BFbnRyeS5nZXRLZXkoKSwgcHJvcEVudHJ5LmdldFZhbHVlKCkpOworCQkJCX0KKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYTIvOTBjZTA1YzY5YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2EyLzkwY2UwNWM2OWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODIxYTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2EyLzkwY2UwNWM2OWEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzM4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkOgorCQkJY29uLmNvbW1pdCgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYTcvMTBhNDkwY2M1MWJhMDAxYTFhNjc4NzliMDUyY2M3N2MgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2E3LzEwYTQ5MGNjNTFiYTAwMWExYTY3ODc5YjA1MmNjNzdjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTI3OTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2E3LzEwYTQ5MGNjNTFiYTAwMWExYTY3ODc5YjA1MmNjNzdjCkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgPGhlYWQ+CisgIDx0aXRsZT5Xb3JkZm9ybSBTZXJ2aWNlcyAoaW5jbHVkaW5nIEdsZW1tIFNlcnZpY2VzKTwvdGl0bGU+CisgIDwhLS0gbG9hZCBjbGllbnQgamF2YXNjcmlwdCBsaWJyYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvanMva29yYXAtcGx1Z2luLTAuMi5qcyIKKyAgICAgICAgICBkYXRhLXNlcnZlcj0iaHR0cHM6Ly9rb3JhcC5pZHMtbWFubmhlaW0uZGUvIj48L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgIDxzY3JpcHQ+CisgICAgICAgbGV0IGRhdGEgPSB7CisgICAgICAgICAnYWN0aW9uJyA6ICdwaXBlJywKKyAgICAgICAgICdzZXJ2aWNlJyA6ICdodHRwOi8vYzByNGZ0Lmlkcy1tYW5uaGVpbS5kZTo0MDkxMy93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVC93Zm9ybVNlcnZpY2VzL3BsdWdpbi5odG1sJworICAgICAgIH07CisKKyAgICAgICBmdW5jdGlvbiBwbHVnaW5pdCAocCkgeworICAgICAgICAgcC5vbk1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAgaWYgKG1zZy5rZXkgPT0gJ2dsZW1tJykgeworICAgICAgICAgICAgIGlmIChtc2cudmFsdWUpIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2FkZCc7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgZGF0YVsnam9iJ10gPSAnZGVsJzsKKyAgICAgICAgICAgICB9OworICAgICAgICAgICAgIEtvckFQbHVnaW4uc2VuZE1zZyhkYXRhKTsKKyAgICAgICAgICAgfTsKKyAgICAgICAgIH07CisgICAgICAgfTsKKyAgICAgPC9zY3JpcHQ+CisgICA8L2JvZHk+Cis8L2h0bWw+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWEvNDBhMGRhODk2NjJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FhLzQwYTBkYTg5NjYyYTAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OWU3ODkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FhLzQwYTBkYTg5NjYyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjcyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzOgorCXN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIyIjsKKwlzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwlzdGF0aWMgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJc3RhdGljIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwkvLyAKKwl0cnkgeworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCVN5c3RlbS5lcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSO+/vXVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJU3lzdGVtLmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwl0cnkgeworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcygpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgIAkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWEvNzA2Y2E4N2Q4NDJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FhLzcwNmNhODdkODQyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlN2M3NTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FhLzcwNmNhODdkODQyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzAyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxTdHJpbmc+CisJCQkJc2V0UHJvcCA9IHByb3BzLnN0cmluZ1Byb3BlcnR5TmFtZXMoKTsKKwkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWIvNzA0NGQ4YjY1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FiLzcwNDRkOGI2NWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTE1NTcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FiLzcwNDRkOGI2NWQzZTAwMWMxMDM1YzFlYWYzOGFmNTkwCkBAIC0wLDAgKzEsODEyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8vIENvbnN0YW50cyBvZiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJc3RhdGljIGZpbmFsIGludCBtYXhMZW1tYVNpemUJPSA2NDsgCS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJc3RhdGljIGZpbmFsIGludCBtYXhXZlNpemUJCT0gNjQ7CS8vIG1heC4gbm8uIG9mIGNoYXJzLCBhcyBkZWNsYXJlZCBpbiB0YWJsZSBHbGVtbUxlbW1hdGEuCisJCisJLyogdmFyaWFibGVzICovCisJc3RhdGljIGludCBuRXhjZXB0U3RtdAkJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIHByZXBhcmVkU3RtdC4KKwlzdGF0aWMgaW50IG5FeGNlcHRJbnNlcnQJCT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICAgIGNoZWNrRGVyYnlDb25uZWN0aW9uOgorCSAqIAorCSAqIGNoZWNrIGlmIERlcmJ5IE5ldHdvcmsgU2VydmVyIGlzIGF2YWlsYWJsZS4KKwkgKiBSZXR1cm5zOiAwICg9T0spIG9yIC0xIChvbiBlcnJvcikuCisJICogMDUuMTEuMjEvRkIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBjaGVja0RlcmJ5Q29ubmVjdGlvbigpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJjaGVja0RlcmJ5Q29ubmVjdGlvbiI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nIHRvICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKwlpZiggbkVycm9ycyA9PSAtMSApCisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogU1FMIGVycm9yIHdoZW4gY3JlYXRpbmcgU1FMIHN0YXRlbWVudCFcbiIsIGZ1bmMpOworCWVsc2UgaWYoIG5FcnJvcnMgPT0gLTIgKQorCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZXJyb3IgdG8gRGVyYnkgU2VydmVyIVxuIiwgZnVuYyk7CisJZWxzZSBpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIAorCSAqIAkJCS0xOiBTUUwgaW5zZXJ0IGVycm9yLCBvcgorCSAqIAkJCS0yOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciwgb3IKKwkgKiAJCSAgID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCQkKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCISAocmV0PSVkKVxuIiwgZnVuYywgbGluZSwgcmV0KTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0yOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsKKwkJCS8vIGltcG9ydGFudDogbm93IGNvbW1pdCwgYXMgYXV0b0NvbW1pdCBpcyBkZWFjdGl2YXRlZCwKKwkJCS8vIHRoaXMgYWxzbyByZW1vdmVzIGRhdGFiYXNlIGxvY2tzOgorCQkJY29uLmNvbW1pdCgpOworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb21taXQgc3VjY2Vzc2Z1bGwuXG4iLCBmdW5jKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCQorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkluZm8gOiAlczogbm8uIG9mIGxlbW1hdGEvd2YgcGFpcnMgaW5zZXJ0ZWQgPSAlZC5cbiIsIGZ1bmMsIG5JbnNlcnRlZCk7CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogMDUuMS4yMS9GQiByZWplY3QgbGVtbWEvd2YgPiA2NCBjaGFycy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCS8vIGNoZWNrIHNpemUgb2Ygd2YgYW5kIGxlbW1hIGFnYWluc3QgZmllbGQgc2l6ZSBpbiB0YWJsZSBHbGVtbUxlbW1hdGE6CisJaWYoIGxlbW1hLmxlbmd0aCgpID49IEdsZW1tREIubWF4TGVtbWFTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBsZW1tYSByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heExlbW1hU2l6ZSwgbGVtbWEpOworCQlyZXR1cm4gNDsKKwkJfQorCWlmKCB3Zi5sZW5ndGgoKSA+PSBHbGVtbURCLm1heFdmU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2YgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhXZlNpemUsIHdmKTsKKwkJcmV0dXJuIDU7CisJCX0KKwkgCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgZmlsbGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQgd2l0aCBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRTdG10IDw9IDEgKQorCQkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViISAobj0lZClcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMsIG4pOworIAkJCXJldHVybiAyOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdEluc2VydCA8PSAxICkKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAzOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hZC85MDhmZDM0NTU1M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWQvOTA4ZmQzNDU1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlNDJjZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYWQvOTA4ZmQzNDU1NTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MjEgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogd3JpdGVEQkxlbW1hdGEoKQorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJI77+9dXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2FkL2QwNTQ5ZjJlOTMxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hZC9kMDU0OWYyZTkzMWEwMDFhMTliMjg3NWRlMDI3MmM2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzBlNjBlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9hZC9kMDU0OWYyZTkzMWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDMxIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICA8ZGVzY3JpcHRpb24+UkVTVGZ1bGwgR2xlbW1TZXJ2aWNlcyBmw7xyIEtvckFQPC9kZXNjcmlwdGlvbj4KKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iMC8yMDU3OTU1ODBhM2UwMDFjMTM2M2JlYjkzMmFlNjNhMSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjAvMjA1Nzk1NTgwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmM0NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjAvMjA1Nzk1NTgwYTNlMDAxYzEzNjNiZWI5MzJhZTYzYTEKQEAgLTAsMCArMSw3NDYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CT0gMDsJLy8gY291bnQgbm8uIG9mIGV4Y2VwdGlvbnMgZm9yIEluc2VydHMuCisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb21taXQgYXQgdGhlIGVuZCBvZiB0aGUgd2ZzIGxpc3QgZmFpbGVkIVxuIiwgZnVuYyk7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjMvMDA2MmYzNzFhYzJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2IzLzAwNjJmMzcxYWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjczNTMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2IzLzAwNjJmMzcxYWMyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjgzIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2IzL2EwNTFhYWEwOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iMy9hMDUxYWFhMDk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDg4N2FiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iMy9hMDUxYWFhMDk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDU2IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICAgIDx3ZWJYbWw+V2ViQ29udGVudFxXRUItSU5GXHdlYi54bWw8L3dlYlhtbD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICAgIDxmaW5hbE5hbWU+R2xlbW1TZXJ2aWNlczwvZmluYWxOYW1lPgorICA8L2J1aWxkPgorICAKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2I2L2EwYjdiNmU4NDEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iNi9hMGI3YjZlODQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGU5YzIwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iNi9hMGI3YjZlODQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk1OCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYjcvMjBjOGNjMzI0MjNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2I3LzIwYzhjYzMyNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTExMzkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2I3LzIwYzhjYzMyNDIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTYyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2I5L2UwMjU3OTU3NTMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iOS9lMDI1Nzk1NzUzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2YyZDBkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iOS9lMDI1Nzk1NzUzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk4MyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgICAgICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmIvYTA1MjQ2NDU5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JiL2EwNTI0NjQ1OTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YmZkZWYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JiL2EwNTI0NjQ1OTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCkBAIC0wLDAgKzEsNTUgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD5HbGVtbVNlcnZpY2VzMjwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisgIDxuYW1lPkdsZW1tU2VydmljZXM8L25hbWU+CisgIAorICA8ZGVzY3JpcHRpb24+UkVTVGZ1bGwgR2xlbW1TZXJ2aWNlcyBmw7xyIEtvckFQPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjU8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8IS0tIGh0dHBzOi8vbXZucmVwb3NpdG9yeS5jb20vYXJ0aWZhY3QvamF2YXgud3MucnMvamF2YXgud3MucnMtYXBpIC0tPgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXgud3MucnM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amF2YXgud3MucnMtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuMDwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPkdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iZS8zMDdkODllMTQzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvMzA3ZDg5ZTE0MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllNTliYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvMzA3ZDg5ZTE0MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSwzMiBAQAorIyBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXM6CisjIGV4cGVjdGVkIGluIC9XRUItSU5GLy4KKworIyMgR2VuZXJhbCBwcm9wZXJ0aWVzOgorR1NfV29ya2luZ1BhdGggPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy93b3JrLWxpdmUKKworIyBHbGVtbURCIHByb3BlcnRpZXM6CisjIERlcmJ5QXJjaGl2REIgPSBkYXRhYmFzZSBmb3IgdGhlIHdmb3JtIGxpc3Qgb2YgYSB3aG9sZSBDMi1BcmNoaXZlOgorZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5QXJjaGl2ZURCCisjZm5hbWVEQiAJCT0gL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCMgorc2VydmVySG9zdAk9IC8vbG9jYWxob3N0OjE1MjcvCisKKyMjIEdsZW1tOiBwcm9wZXJ0aWVzIGZvciBsZW1tYXRpemluZzoKKworIyBmbmFtZVNjcmlwdCA9IEdTX1dvcmtpbmdQYXRoICsgZG9HbGVtbQorZm5hbWVTY3JpcHQgPSBkb0dsZW1tCisjIGZuYW1lV2ZzID0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworZm5hbWVXZnMgPSBnbF93ZnNfaW4udHh0CisjIGZuYW1lU2NyaXB0CT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworZm5hbWVTY3JpcHQJPSBkb0dsZW1tCisjIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworIyBsZW0zIGV4cGVjdGVkIHRvIGJlIElTTzg4NTktMSBlbmNvZGVkLgorZm5hbWVMZW1hdGEJPSB0bXAvbGVtMworCisjIyBMb2dpbmc6CisKKyMgZm5hbWVPdXQgPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworI2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy10LmxvZworZm5hbWVPdXQgPSBHbGVtbVNlcnZpY2VzLmxvZworIyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKyNmbmFtZUVyciA9IEdsZW1tU2VydmljZXMtdC5lcnIKK2ZuYW1lRXJyID0gR2xlbW1TZXJ2aWNlcy5lcnIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvODBiZGFkNTZhNTJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlLzgwYmRhZDU2YTUyYTAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzEzZmUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JlLzgwYmRhZDU2YTUyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjYyIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKQorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCXByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJRmlsZU91dHB1dFN0cmVhbQorCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTs7CisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9iZS9iMDBkNjVkMzg2MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvYjAwZDY1ZDM4NjJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhN2VjYwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmUvYjAwZDY1ZDM4NjJiMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MDkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCBwcm9wcyAnR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJyEiLCAgZnVuYyk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYmYvYzA5ODc2MWM4MjJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JmL2MwOTg3NjFjODIyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDA4MjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2JmL2MwOTg3NjFjODIyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjkzIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQkKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy9IdHRwU2VydmxldENvbnRleHQKKwkJCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQlJbnB1dFN0cmVhbQorCQkJaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIkdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkKKwkJcHJvcHMubG9hZChpblByb3ApOworCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2MxLzYwOGU1YWJiNDMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMS82MDhlNWFiYjQzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU2YzUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMS82MDhlNWFiYjQzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDMyIEBACisjIEdsZW1tU2VydmljZXMgcHJvcGVydGllczoKKyMgZXhwZWN0ZWQgaW4gL1dFQi1JTkYvLgorCisjIyBHZW5lcmFsIHByb3BlcnRpZXM6CitHU19Xb3JraW5nUGF0aCA9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL3dvcmstbGl2ZQorCisjIEdsZW1tREIgcHJvcGVydGllczoKKyMgRGVyYnlBcmNoaXZEQiA9IGRhdGFiYXNlIGZvciB0aGUgd2Zvcm0gbGlzdCBvZiBhIHdob2xlIEMyLUFyY2hpdmU6CitmbmFtZURCIAkJPSAvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlBcmNoaXZEQgorI2ZuYW1lREIgCQk9IC9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQjIKK3NlcnZlckhvc3QJPSAvL2xvY2FsaG9zdDoxNTI3LworCisjIyBHbGVtbTogcHJvcGVydGllcyBmb3IgbGVtbWF0aXppbmc6CisKKyMgZm5hbWVTY3JpcHQgPSBHU19Xb3JraW5nUGF0aCArIGRvR2xlbW0KK2ZuYW1lU2NyaXB0ID0gZG9HbGVtbQorIyBmbmFtZVdmcyA9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKK2ZuYW1lV2ZzID0gZ2xfd2ZzX2luLnR4dAorIyBmbmFtZVNjcmlwdAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKK2ZuYW1lU2NyaXB0CT0gZG9HbGVtbQorIyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKyMgbGVtMyBleHBlY3RlZCB0byBiZSBJU084ODU5LTEgZW5jb2RlZC4KK2ZuYW1lTGVtYXRhCT0gdG1wL2xlbTMKKworIyMgTG9naW5nOgorCisjIGZuYW1lT3V0ID0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKyNmbmFtZU91dCA9IEdsZW1tU2VydmljZXMtdC5sb2cKK2ZuYW1lT3V0ID0gR2xlbW1TZXJ2aWNlcy5sb2cKKyMgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisjZm5hbWVFcnIgPSBHbGVtbVNlcnZpY2VzLXQuZXJyCitmbmFtZUVyciA9IEdsZW1tU2VydmljZXMuZXJyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2MyL2MwMDZlOTBhMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMi9jMDA2ZTkwYTEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWZjZjkzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMi9jMDA2ZTkwYTEyMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcxOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCVN0cmluZworCQkJcHJvcE5hbWUgPSAiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkJLy8gcmVhZCB0ZXN0CisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCQkJCisJCS8vZ2V0U2VydmxldENvbnRleHQoLikKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisKKwkJSW5wdXRTdHJlYW0KKwkJCS8vaW5Qcm9wID0gR2xlbW1TZXJ2aWNlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCQkJaW5Qcm9wID0gSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcE5hbWUpOworCisJCWlmKCBpblByb3AgPT0gbnVsbCApCisJCQl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgbG9hZCAnJXMnIVxuIiwgZnVuYywgcHJvcE5hbWUpOworCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKiovCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkvKiovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jMy9jMGFjNmI1MTExMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzMvYzBhYzZiNTExMTJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyYWNlOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzMvYzBhYzZiNTExMTJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MTYgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQlTdHJpbmcKKwkJCXByb3BOYW1lID0gIi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisJCQorCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyFcbiIsIGZ1bmMsIHByb3BOYW1lKTsKKwkJCXJldHVybiBudWxsOworCQkJfQorCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNC8wMDM2Yjg4NzVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzQvMDAzNmI4ODc1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlN2RlOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzQvMDAzNmI4ODc1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKQEAgLTAsMCArMSw4MTAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLy8gQ29uc3RhbnRzIG9mIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlzdGF0aWMgZmluYWwgaW50IG1heExlbW1hU2l6ZQk9IDY0OyAJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwlzdGF0aWMgZmluYWwgaW50IG1heFdmU2l6ZQkJPSA2NDsJLy8gbWF4LiBuby4gb2YgY2hhcnMsIGFzIGRlY2xhcmVkIGluIHRhYmxlIEdsZW1tTGVtbWF0YS4KKwkKKwkvKiB2YXJpYWJsZXMgKi8KKwlzdGF0aWMgaW50IG5FeGNlcHRTdG10CQkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgcHJlcGFyZWRTdG10LgorCXN0YXRpYyBpbnQgbkV4Y2VwdEluc2VydAkJPSAwOwkvLyBjb3VudCBuby4gb2YgZXhjZXB0aW9ucyBmb3IgSW5zZXJ0cy4KKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogICAgY2hlY2tEZXJieUNvbm5lY3Rpb246CisJICogCisJICogY2hlY2sgaWYgRGVyYnkgTmV0d29yayBTZXJ2ZXIgaXMgYXZhaWxhYmxlLgorCSAqIFJldHVybnM6IDAgKD1PSykgb3IgLTEgKG9uIGVycm9yKS4KKwkgKiAwNS4xMS4yMS9GQgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgdG8gJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSAKKwkJeyAKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gY2hlY2tfRGVyYnlDb25uZWN0aW9uCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorCWlmKCBuRXJyb3JzID09IC0yICkKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGVycm9yIHRvIERlcmJ5IFNlcnZlciFcbiIsIGZ1bmMpOworCWVsc2UgaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAKKwkgKiAJCQktMTogU1FMIGluc2VydCBlcnJvciwgb3IKKwkgKiAJCQktMjogY29ubmVjdGlvbiBlcnJvciB0byBEZXJieSBTZXJ2ZXIsIG9yCisJICogCQkgICA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMjsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzQvNDA0YTcyOTY4NTJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M0LzQwNGE3Mjk2ODUyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWVhZGUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M0LzQwNGE3Mjk2ODUyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzA3IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5KDxPYmplY3Q+LDxPYmplY3Q+KQorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCWZvcihTdHJpbmcgcHJvcCBzZXRQcm9wcykKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wLCBzZXRQcm9wcy5nZXRQKQorCQkJCX0KKwkJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M0L2UwYTcwMmVmNDEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNC9lMGE3MDJlZjQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjcyOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNC9lMGE3MDJlZjQxM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk1OCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkL3tkYXRhYmFzZW5hbWUiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQvIik7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jNi9lMGNlMTE0ODk5M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzYvZTBjZTExNDg5OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1ODQyOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzYvZTBjZTExNDg5OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MjkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCisJICogICAgICAgICAgICAgICAgICAgICAgIHdyaXRlREJMZW1tYXRhKCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjDpHVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqIDA0LjExLjIxL0ZCIHR1cm4gYXV0b2NvbW1pdCBvZmYgdG8gYWNjZWxlcmF0ZSBodWdlIGFtb3VudCBvZiBpbnNlcnRpb25zLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCWNvbi5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQgKGF1dG9Db21taXQ9b2ZmKS5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJaWYoIGJMb2cgKQorCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzkvOTAyOThhMGQ0YzNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M5LzkwMjk4YTBkNGMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODkzMjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M5LzkwMjk4YTBkNGMzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTc1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBwb3N0ZWQgbGlzdCA9ICclcycuXG4iLCBmdW5jLCBsaXN0KTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvYzkvZDBhZmY3ZjI0MTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M5L2QwYWZmN2YyNDEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwM2JhZmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2M5L2QwYWZmN2YyNDEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTYxIEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZSIpIAorCUBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2NiL2IwZDUwZTc4YmU4ZTAwMWExY2I4YTFlYTA4MzQzOGFlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jYi9iMGQ1MGU3OGJlOGUwMDFhMWNiOGExZWEwODM0MzhhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzRlMTczCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9jYi9iMGQ1MGU3OGJlOGUwMDFhMWNiOGExZWEwODM0MzhhZQpAQCAtMCwwICsxLDY3IEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMTwvdmVyc2lvbj4KKyAgPCEtLSAgPnBhY2thZ2luZz53YXI8L3BhY2thZ2luZy0tPgorICA8bmFtZT5Kc29uIFRlc3QgTWV0aG9kczwvbmFtZT4KKyAgCisgIDxkZXNjcmlwdGlvbj5UZXN0cyBmb3IgSnNvbiBQYXJzaW5nPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgIDwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKwk8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPmNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlPC9ncm91cElkPgorCSAgPGFydGlmYWN0SWQ+amFja3Nvbi1kYXRhYmluZDwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPjIuOS42PC92ZXJzaW9uPgorCSAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwk8L2RlcGVuZGVuY3k+CisJPGRlcGVuZGVuY3k+CisJCTxncm91cElkPmRlLmtvcmFwLmpzb248L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPkpzb25UcmF2ZXJzZTwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPlRlc3RHbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvY2IvZTA3MDEyZTM5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2NiL2UwNzAxMmUzOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWQwZTAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2NiL2UwNzAxMmUzOTQxYTAwMWExOWIyODc1ZGUwMjcyYzZjCkBAIC0wLDAgKzEsNjIgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIAorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgIDxncm91cElkPmRlLmtvcmFwLnNlcnZpY2VzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD5HbGVtbVNlcnZpY2VzMjwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisgIDxuYW1lPkdsZW1tU2VydmljZXM8L25hbWU+CisgIAorICA8ZGVzY3JpcHRpb24+UkVTVGZ1bGwgR2xlbW1TZXJ2aWNlcyBmw7xyIEtvckFQPC9kZXNjcmlwdGlvbj4KKyAgCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+My44LjE8L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjU8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgICA8IS0tIGh0dHBzOi8vbXZucmVwb3NpdG9yeS5jb20vYXJ0aWZhY3QvamF2YXgud3MucnMvamF2YXgud3MucnMtYXBpIC0tPgorICAgPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+amF2YXgud3MucnM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amF2YXgud3MucnMtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuMDwvdmVyc2lvbj4KKyAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIAorICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My43LjA8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgPHRhcmdldD4xLjg8L3RhcmdldD4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4zLjIuMTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5XZWJDb250ZW50PC93YXJTb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgPHdlYlhtbD5XZWJDb250ZW50XFdFQi1JTkZcd2ViLnhtbDwvd2ViWG1sPgorICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgICA8ZmluYWxOYW1lPkdsZW1tU2VydmljZXM8L2ZpbmFsTmFtZT4KKyAgPC9idWlsZD4KKyAgCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kLzMwNjRiNDAzMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kLzMwNjRiNDAzMTIyYzAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTU3MmYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2QvMzA2NGI0MDMxMjJjMDAxYzFjNDFjZTU1OWVhNWUxNmIKQEAgLTAsMCArMSw3MTkgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA2LjEwLjIxIjsgLy8iMTcuMDYuMjAiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMSI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwkJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwkJU3RyaW5nCisJCQlzdGF0dXM7CisJCVV0aWxzCisJCQl1ID0gbmV3IFV0aWxzKCk7CisJCVByb3BlcnRpZXMKKwkJCXByb3BzOworCQlTdHJpbmcKKwkJCXByb3BOYW1lID0gIkdsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkJCQorCQkvL2dldFNlcnZsZXRDb250ZXh0KC4pCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCisJCUlucHV0U3RyZWFtCisJCQkvL2luUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKwkJCWluUHJvcCA9IEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKworCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyFcbiIsIGZ1bmMsIHByb3BOYW1lKTsKKwkJCXJldHVybiBudWxsOworCQkJfQorCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kMC81MDU0NDBjMzRhM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDAvNTA1NDQwYzM0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzYzQyMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDAvNTA1NDQwYzM0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MjAgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBkYnBhdGgJIDogbG9jYXRpb24gKyBuYW1lIG9mIGRhdGFiYXNlIHdoZXJlIHRvIHN0b3JlIGxlbW1hdGErd2ZzLgorCSAqIFJldHVybnMJIDogMD1PSywgLTE6IGdlbmVyYWwgZXJyb3I7ID4gMCA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiBkeW5hbWljYWxseSBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAwNC4xMS4yMS9GQiBkYnBhdGguCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gd2hlbiBpbmRleGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLCBzZWxlY3QgdGhlIHN1Ym1pdHRlZCBkYnBhdGgsCisJLy8gKG5vdCB0aGUgb25lIHN0b3JlZCBpbiB0aGUgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBkYnBhdGg7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBkZXJieURCVVJMPSclcycuXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2QxLzMwYmVhYTBkN2UzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kMS8zMGJlYWEwZDdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWFlMGJmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kMS8zMGJlYWEwZDdlM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDcyNiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCitwdWJsaWMgY2xhc3MgR2xlbW1EQgorCit7CisJc3RhdGljIHB1YmxpYyBTdHJpbmcgZGJUYWJsZSAJPSAiR2xlbW1MZW1tYXRhIjsKKwlzdGF0aWMgU3RyaW5nIGRiTGVtbWEgCQkgCT0gImxlbW1hIjsKKwlzdGF0aWMgU3RyaW5nIGRiV2YJIAkJCT0gIndmIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDEgCQkJPSAicHJvcDEiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMiAJCQk9ICJwcm9wMiI7CisKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKG92ZXJ3cml0dGVuIGJ5IEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZuYW1lREIgPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2VydmVySG9zdCA9ICIvL2xvY2FsaG9zdDoxNTI3LyI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChmaW5hbCBhc3NpZ25tZW50cyk6CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyRW1iID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciI7CisJZmluYWwgcHJpdmF0ZSAgU3RyaW5nIGRlcmJ5RHJpdmVyQ2xpZW50ID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOworCisJZmluYWwgc3RhdGljIGJvb2xlYW4KKwkJdXNlUHJlcGFyZWRTdG10ID0gdHJ1ZTsgLy8gMT11c2UgUHJlcGFyZWRTdGF0ZW1lbnQgYW5kIG5vdCBTdGF0ZW1lbnQuCisJCisJLy8gdmFsdWVzIHRvIGJlIGluc2VydGVkOiBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYy4KKwlzdGF0aWMgU3RyaW5nIGluc2VydFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKCclcycsICclcycsICclcycsICclcycsICclcycpIjsKKwlzdGF0aWMgU3RyaW5nIGluc2VydFByZXBhcmVkUXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoPywgPywgPywgPywgPykiOworCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCWVsc2UKKwkJCQluSW5zZXJ0ZWQrKzsKKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCWZpbmFsIGJvb2xlYW4KKwkJYkxvZyA9IGZhbHNlOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Q0LzAwNTQ0NWFjNTIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kNC8wMDU0NDVhYzUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzYwZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9kNC8wMDU0NDVhYzUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk4MyBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogICAgICAgICAgICAgZW5jb2RlZCBhcyAiLmhvbWUudXNlci5Lb3JBUC4uLi4iLCBtdXN0IGJlIGNvbnZlcnRlZCB0bworCSAqICAgICAgICAgICAgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgICAgICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gCisJCWFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoLnJlcGxhY2UoJy4nLCAnLycpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IHNlbGVjdGVkIGRhdGFiYXNlIHBhdGggPSAnJXMnLlxuIiwgZnVuYywgZGJwYXRoKTsKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiB3b3JraW5nIGRpcmVjdG9yeSA9ICclcycuXG4iLCBmdW5jLCBHU19Xb3JraW5nUGF0aCk7CisJCisJLy8gc2V0IGZpbGUgYW5kIHBhdGhzIGFmdGVyIEdTX1dvcmtpbmdQYXRoIGhhcyBiZWVuIGluaXRpYWxpc2VkOgorCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBmb3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKGZlcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMsIGZvdXQsIGZlcnIpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNmw7xocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSwgcHJvcHMsIGRicGF0aCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZDcvNjBjY2ZiNzA1NDNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Q3LzYwY2NmYjcwNTQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NjY0MTMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Q3LzYwY2NmYjcwNTQzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzE4IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIHdyaXRlREJMZW1tYXRhKCkKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSO+/vXVzZXIgKy0gSGF1cyIuCisJICogUmV0dXJuczogMCA9IE9LIG9yIC0xOiBnZW5lcmFsIGVycm9yIG9yID4gMDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAwOS4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKworCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhXG4iLCBmdW5jLCBsaW5lKTsKKwkJCQluRXJyb3JzKys7IAorCQkJCX0KKwkJCX0gLy8gd2hpbGUKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgR2xlbW0gbGVtbWF0YStpbmZvcyBmcm9tIGZpbGUhIEV4aXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOyAKKwkJfQkKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIC0xOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIG5FcnJvcnM7IC8vIDA9T0ssID4wID0gbm8uIG9mIGVycm9ycy4KKwl9IC8vIHdyaXRlREJMZW1tYXRhCisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIHJ1bGVzIGludG8gRGVyYnkgREIuCisJICogTm90ZXM6CisJICogLSB0aGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggYSBQcmVwYXJlZFF1ZXJ5LgorCSAqIFBhcmFtZXRlcnM6CisJICogc3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDE3LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKyAgICAvLyBub3cgaW5zZXJ0IG5ldyB2YWx1ZXMgaW50byBQcmVwYXJlZFN0YXRlbWVudDoKKyAgICB0cnkgeworICAgIAlzdG10LnNldFN0cmluZyggMSwgbGVtbWEpOworICAgICAgICBzdG10LnNldFN0cmluZyggMiwgd2YpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oMywgcHJvcDEpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNCwgcHJvcDIpOworICAgICAgICBzdG10LnNldEJvb2xlYW4oNSwgc3BlYyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJlcGFyZWQgc3RtdCA9ICclcycuXG4iLCAgZnVuYywgc3RtdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZTEpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigJIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisgICAgCisgICAgdHJ5IHsKKwkJLy8gZXhlY3V0ZSB0aGUgZmlsbGVkIHByZXBhcmVkIHN0YXRlbWVudDoKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKyAgICAKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZTAvMTAzN2I1ZTc0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2UwLzEwMzdiNWU3NGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTJjYmMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2UwLzEwMzdiNWU3NGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTc1IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkL3tkYXRhYmFzZW5hbWV9OiB0ZXh0L3BsYWluCisJICogCisJICogUGFyYW1ldGVyczoKKwkgKiBsaXN0CQkgOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aAkgOiB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIHdoZXJlIHRoZSBsZW1tYSt3ZnMgYXJlIHRvIGJlIHN0b3JlZC4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCWxpc3QsCisJCQkJCQkJQFBhdGhQYXJhbSh2YWx1ZT0iZGF0YWJhc2VwYXRoIikgCWZpbmFsIFN0cmluZyBkYnBhdGgKKwkJCQkJCQkpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9QT1NUX2ltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkLyIpOworCQorCWZvdXQucHJpbnRmKCJJbmZvIDogJXM6IGRhdGFiYXNlIHBhdGggPSclcycuXG4iLCBmdW5jLCBkYnBhdGgpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHBvc3RlZCBsaXN0ID0gJyVzJy5cbiIsIGZ1bmMsIGxpc3QpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcywgZGJwYXRoKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwkKKwl9IC8vIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKworCS8qIGRvR0VUX3ZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnMgPSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvLyIpOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJZmluYWwgU3RyaW5nCisJCWRiTmFtZSA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPmRhdGFiYXNlPC9iPjogJXM8L3A+IiwgZm9ybWF0RGJOYW1lKHByb3BzKSk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIGRiTmFtZSArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gZG9HRVRfdmlld0RCSW5mbworCisKKwkvKiBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND52ZXJzaW9uICIgKyB2ZXJzaW9uICsgIiB2b20gIiArIHZlcnNpb25EYXRlICsgIiByZXF1ZXN0ID0gJyIgKyBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpICsgIic8L2k+PC9oND5cbiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAxOjwvYj4gKEMyIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfTwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPntsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpPC9jb2RlPjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw8L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT7Dlmw/b3B0cz1mbGV4K2NvbXArb3RoZXIrc3BlYzwvY29kZT48L3A+IiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDI6PC9iPiAoaW50ZXJuYWwgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9P3Byb3AxPVswMTJdJmFtcDtwcm9wMj1bMDEyXSZhbXA7c3BlYz1bMDEyXTwvY29kZT4gKHdoZXJlIGVhY2ggcHJvcDEsIHByb3AyLCBzcGVjIGlzIG9wdGlvbmFsKS48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsP3Byb3AxPTAmYW1wO3Byb3AyPTEmYW1wO3NwZWM9MjwvY29kZT48L3A+IjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0nJWQnIHByb3AyPSclZCcgc3BlYz0nJWQnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJLyogCisJZm9yKGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCQl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCQl9CQorCSAqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCBsZW1tYUluZm8ub3B0c1NldHRpbmcgPT0gTGVtbWFJbmZvLk9QVFNfU0VUVElOR19DMiApIAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEscHJvcDIsc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZyk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWludAorCQluV2ZzID0gbGVtbWFJbmZvLm5XZnM7CisJCisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJLy8gbG9nIG91dGNvbWU6CisJaWYoIG5XZnMgPCAwICkKKwkJZm91dC5wcmludGYoIkVycm9yOiAlczogcmV0dXJuaW5nIDAgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jKTsKKwllbHNlCisJCWZvdXQucHJpbnRmKCJEZWJ1Zy4gJXM6IHJldHVybmluZyAlZCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMsIG5XZnMpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiBub3RlOgorCSAqIC0gaWYgQnJvd3NlciByZXF1ZXN0OiBIVFRQU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ3RleHQvaHRtbCwuLi54bWwuLi4nCisJICogLSBpZiBXZm9ybVNlcnZpY2VzIHJlcXVlc3Q6IEh0dHBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAnYXBwbGljYXRpb24vanNvbicuCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKiAKKwkgKiAtIHN1Ym1pdHRlZCBVUkwsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYSwgaXMgaW50ZXJwcmV0ZWQgYnkgZ2xhc3NmaXNoIGFzCisJICogICBiZWluZyBJU08tODg1OS0xIGVuY29kZWQuIFdoZW4gdGhlIHJlcXVlc3QgaXMgVVRGLTggZW5jb2RlZCwgVW1sYXV0cyBhbmQKKwkgKiAgICfDnycgYXJlIG1pcy1pbnRlcnByZWRlZCwgbGVhZGluZyB0byBhbiBlcnJvbmVyb3VzIHJlcXVlc3QgdG8gdGhlIERlcmJ5CisJICogICBkYXRhYmFzZS4KKwkgKiAtIFJlcXVlc3RlZCBsZW1tYSAnbGVtbWEnIGhhcyB0byBiZSB0cmFuc2Zvcm1lZCB0byBVVEYtOCBmaXJzdC4KKwkgKiAtIG5vdGU6IGV2ZW4gd2hlbiBzdWJtaXR0aW5nIHRoZSBHRVQgcmVxdWVzdCBieSBzcGVjaWZ5aW5nICdjaGFyZW5jb2RlPVVURi04JywKKwkgKiAgIGdsYXNzZmlzaCBkb2VzIG5vdCBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgYXMgZXhwZWN0ZWQuCisJICogICAKKwkgKiAgMjIuMTAuMjEvRkIKKwkgKiAKKwkgKiAtIGlmIGFjY2VwdD1hcHBsaWNhdGlvbi9qc29uIHJldHVybiBVVEYtOCAoV2Zvcm1TZXJ2aWNlcykuCisJICogLSBlbHNlIGlmIGFjY2VwdD10ZXh0L2h0bWwgZG8gbm90IHRyYW5zZm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmcgKEJyb3dzZXIpLgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24sIHRleHQvaHRtbCIpCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbzsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwlmaW5hbCBib29sZWFuCisJCWJFbmNvZGVMZW1tYSA9IGZhbHNlOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOworCQorCS8qIHRlc3Q6CisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWlmKCBiRW5jb2RlTGVtbWEgKQorCQl7CisJCS8vIHdoZW4gYWNjZXB0aW5nIEpTT04sIHVybCBoYXMgdG8gYmUgY29udmVydGVkIHRvIFVURi04LCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWE6CisJCXRyeSB7CisJCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKG5ldyBTdHJpbmcobGVtbWEuZ2V0Qnl0ZXMoIklTTy04ODU5LTEiKSwgInV0Zi04IikpOworCQkJfSAKKwkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJTGVtbWFSZXNwb25zZQorCQkJCWxlbXJlc3AgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1yZXNwKS5idWlsZCgpOworCQkJfQorCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFtVVEYtOF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKwllbHNlCisJCXsKKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW3VuY2hhbmdlZF0gb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWFJbmZvLmxlbW1hT3JpZywgb3B0aW9ucyk7CisJCX0KKworCS8qIGRvZXMgbm90IGhlbHA6CisJIFN0cmluZworCSAJcmVxdWVzdENoYXJFbmNvZGluZyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVxdWVzdCBjaGFyYWN0ZXIgZW5jb2RpbmcgPSclcycuXG4iLCBmdW5jLCByZXF1ZXN0Q2hhckVuY29kaW5nKTsKKwkqLworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQl7CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJLy9yZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCX0KKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CQorCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwkvKgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvdGVzdC9pbmZvLyIpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9mb3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCWZvdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lMS82MDViYTYxNjRkM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZTEvNjA1YmE2MTY0ZDNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3MmE3MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZTEvNjA1YmE2MTY0ZDNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5NzQgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSA6IHRoZSBsaXN0IG9mIHdmcyBzZW50IGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisJICogZGJwYXRoCSA6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqIE5vdGVzICAgICA6CisJICogLSBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZSBsb2NhdGVkIGF0ICdkYXRhYmFzZW5hbWUnLgorCSAqIC0gVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQgaW50byBhIERlcmJ5IGRhdGFiYXNlLgorCSAqIElucHV0CSA6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqIDA0LjExLjIxL0ZCCisJICogLSBzdWJtaXR0ZWQgZGF0YWJhc2UgcGF0aC4KKwkgKi8KKwkKKwlAUGF0aCgiYWRkL3tkYXRhYmFzZXBhdGh9IikgCisJQFBPU1QgCisJQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvUE9TVF9pbXBvcnRMZW1tYURhdGEKKwkJCQkJCQkoCisJCQkJCQkJU3RyaW5nIAkJCQkJCQkJbGlzdCwKKwkJCQkJCQlAUGF0aFBhcmFtKHZhbHVlPSJkYXRhYmFzZXBhdGgiKSAJZmluYWwgU3RyaW5nIGRicGF0aAorCQkJCQkJCSkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb1BPU1RfaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9hZGQve2RicGF0aH0iKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2U0LzQwNWU4ZjgzMTEyYzAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lNC80MDVlOGY4MzExMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjg0M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lNC80MDVlOGY4MzExMmMwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcxOSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCVN0cmluZworCQkJcHJvcE5hbWUgPSAiL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkJCQorCQkvL2dldFNlcnZsZXRDb250ZXh0KC4pCisJCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCisJCUlucHV0U3RyZWFtCisJCQkvL2luUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKwkJCWluUHJvcCA9IEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BOYW1lKTsKKworCQlpZiggaW5Qcm9wID09IG51bGwgKQorCQkJeworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgJyVzJyFcbiIsIGZ1bmMsIHByb3BOYW1lKTsKKwkJCXJldHVybiBudWxsOworCQkJfQorCQkKKwkJdHJ5IHsKKwkJCXByb3BzLmxvYWQoaW5Qcm9wKTsKKwkJCVNldDxFbnRyeTxPYmplY3QsT2JqZWN0Pj4KKwkJCQlwcm9wc1NldCA9IHByb3BzLmVudHJ5U2V0KCk7CisJCQkKKwkJCWZvcihFbnRyeTxPYmplY3QsIE9iamVjdD4gcHJvcEVudHJ5IDogcHJvcHNTZXQpCisJCQkJeworCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AgJXMgPSAnJXMnLlxuIiwgZnVuYywgcHJvcEVudHJ5LmdldEtleSgpLCBwcm9wRW50cnkuZ2V0VmFsdWUoKSk7CisJCQkJfQorCQkJfSAKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBsb2FkIHByb3BzICdHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMnISIsICBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCS8vIGVuZCBvZiByZWFkIHRlc3QKKwkJCisJCS8vIHRlc3QKKwkJLyoKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkKKwkJICogcHJvcHMuc2V0UHJvcGVydHkoInAiLCAidGVzdCIpOworCQkgKgorCQlGaWxlT3V0cHV0U3RyZWFtIG91dDsKKwkJdHJ5IHsKKwkJCW91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJnbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCXByb3BzLnN0b3JlKG91dCwgICJ0ZXN0IEdsZW1tU2VydmljZXMgcHJvcGVydGllcyIpOworCQkJfSAKKwkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX07CisJCSovCisJCQorCQkvLyBlbmQgb3Rlc3QKKwkJCisJCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCQlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIkFQSTogJXM6IC9pbmRleC9zdGF0dXMvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiIyMjXG4iKTsKKworCQlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkpOworCisJCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwkJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCUBQYXRoKCJhZGQiKSBAUE9TVCBAQ29uc3VtZXMoInRleHQvcGxhaW4iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgaW1wb3J0TGVtbWFEYXRhKFN0cmluZyBsaXN0KSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydExlbW1hRGF0YSI7CisJU3RyaW5nW10gYXJMaXN0ID0gbGlzdC5zcGxpdCgiXG4iKTsKKwkKKwlGaWxlU3lzdGVtIAorCQlmcyA9IEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKTsKKwlqYXZhLm5pby5maWxlLlBhdGgKKwkJcCA9IGZzLmdldFBhdGgoZm5hbWVXZnMpOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2FkZC8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIFN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcyk7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bvv71ocnVuZyBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEZlaGxlciBhdWZnZXRyZXRlbiEiOworCQorCS8vIEJ1aWxkIGEgcmVwb25zZSBhbmQgcmV0dXJuIGl0OgorCWlmKCByICE9IDAgKQorCQlyZXR1cm4gCisJCSAgICI8aHRtbD4iICsKKwkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBpbXBvcnRHbGVtbUxlbW1hdGEgcmV0dXJucyByPSVkLlxuIiwgZnVuYywgcik7CisJaWYoIG5FcnJvcnMgPT0gMCApCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiBPSy48L3A+IjsKKwllbHNlCisJCW1zZ0ltcG9ydCA9ICI8cD48Yj5JbXBvcnQ6PC9iPiAiICsgZm5hbWVMZW1hdGEgKyAiOiAiICsgbkVycm9ycyArICIgZXJyb3JzITwvcD4iOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGVuZGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJLy8gUmV0dXJuIEluZm9zOgorCXJldHVybiAKKwkJCSAgICI8aHRtbD4iICsKKwkJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkJICAgIjxwPkNvbnN1bWVzID0gdGV4dC9wbGFpbjwvcD4iICsKKwkJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJCSAgICI8aDI+RW5kb2ZsaXN0PC9oMj4iICsKKwkJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsgbXNnSW1wb3J0ICsKKwkJCSAgICI8L2h0bWw+IjsKKwl9CisKKwkvKiB2aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiKTwvaDQ+XG4iICsgCisJCQkJCQkiPGgyPkN1cnJlbnQgc3RhdGUgb2YgdGhlIERhdGFiYXNlPC9oMj5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiIsCisJCWFscmkgICAgICAgICAgPSAiYWxpZ249J3JpZ2h0JyI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyB2aWV3REJJbmZvCisKKworCS8qIHZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIC0gU3RhdHVzOiA8aT5Xb3JrIGluIHByb2dyZXNzLi4uITwvaT4pPC9oND5cbiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoICFvcHRpb25zLmVxdWFscygidW5kZWYiKSkKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCWVsc2UKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgcHJvcDEvcHJvcDIvc3BlYyBzZXQgZGlyZWN0bHkuPC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMjQuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSlNPTiI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEdsZW1tU2VydmljZXMgJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbkRhdGUsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hUmVzcDogbldmcz0lZCBlcnJNZXNzPSclcycgbGlzdD0nJXMnLlxuIiwgZnVuYywgbGVtbWFSZXNwLmhlYWRfbldmcywgCisJCQkJCQlsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgPyBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzIDogIi0iLAorCQkJCQkJbGVtbWFSZXNwLmxpc3RvZldmcyk7CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzID09IG51bGwgKQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQkKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJIZWFkZXI6ICclcycgPSAnJXMnLlxuIiwga2V5LCB2YWwpOworCQlpZigga2V5LmVxdWFscygiYWNjZXB0IikgKQorCQkJeworCQkJc3dpdGNoKCB2YWwgKQorCQkJCXsKKwkJCWNhc2UgInRleHQvcGxhaW4iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ3RleHQvcGxhaW4nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQljYXNlICJhcHBsaWNhdGlvbi9qc29uIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSlNPTic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSlNPTjsKKwkJCWNhc2UgInRleHQvaHRtbCI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0hUTUwnOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0hUTUw7CisJCQlkZWZhdWx0OiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJyVzJyA9IHVua25vd24hIERlZmF1bHQ9J3RleHQvcGxhaW4nLlxuIiwgdmFsKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CS8vIHNvbWV0aGluZyB3cm9uZy4JCisKKyAJfSAvLyBnZXRBY2NlcHRlZEZvcm1hdAkKKworfQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lYS8yMDVhY2I2ODUzM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWEvMjA1YWNiNjg1MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjNGUzNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWEvMjA1YWNiNjg1MzNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw5ODQgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworLyogMC4xIDogMTcuMDYuMjAvRkIgCisgKiAwLjIgOiAyNS4xMC4yMS9GQgorICogICAgICAgbG9naW5nIG9mIHRoZSBBUEkgUmVxdWVzdHMuCisgKiAgICAgICBsb2FkaW5nIGNvbnN0YW50cyBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKyAqICAgICAgIGNvcnJlY3RpbmcgY2FsbGluZyBvZiBsZW1tYSArIHByb3AxL3Byb3AyL3NwZWMuCisgKiAgICAgICBoYW5kbGluZyBvZiBsZW1tYXRhIHdpdGggJ8OfJy4KKyAqIAorICogR2VuZXJhbCBjb21tZW50cyB0byB0aGUgZW5jb2Rpbmcgb2YgZGVyaXZhdGlvbnMgZnJvbSBsZW1tYSB0byB3ZnMgYW5kIGhvdyB0aGV5IGFyZSBlbmNvZGVkCisgKiBpbiB0aGUgRGVyYnkgZGF0YWJhc2U6CisgKiAKKyAqIEdMRU1NIGVuY29kaW5nOiAgCisgKiAgIF8gXyA6ICtGbGV4ICAgICAgIMOWbGUgLT4gw5ZsICAgICAgCisgKiAgICsgXyA6ICtDb21wICAgICAgIMOWbGxhbXBlIC0+IMOWbCBvciBMYW1wZSAoY29tcG91bmQpLgorICogICBfICsgOiArb3RoZXIgICAgICBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybnNjaHVoIChubyBjb21wb3VuZCBmb3IgJ1R1cm5zY2h1aCcsIG9ubHkgcHJlZml4KS4KKyAqICAgKyArIDogK0NvbXArb3RoZXIgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm4gKyBTY2h1aCAoY29tcG91bmQgZm9yICdTY2h1aCcgKyBQcmVmaXgpLgorICogQzIgbGVtbWF0aXphdGlvbiBvcHRpb25zOgorICogICBGbGV4ICAoaWRlbnRpY2FsIHRvIEdsZW1tKQorICogICBDb21wICAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpCisgKiAgIE90aGVyIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykuCisgKiAgIFNwZWMgIChvbmx5IEMyOiBpbmNsdWRlcyBhbGwgd2ZzIHdpdGggaGlwaGVuIGFuZC9vciBzb21lIG5vbi1hbHBoYWJldGljIElTTzg4NTktMSBjaGFycykKKyAqICAgICAgICAgRS5nLiDDlmwtRXhwb3J0ZSwgIk1hcmtlbiItw5ZsZS4KKyAqIERlcmJ5IEVuY29kaW5nOgorICogIHByb3AxIAlwcm9wMglzcGVjICAgCW1lYW5pbmcgaW4gQzI6CisgKiAgMAkJMAkJLQkJRmxleAorICogIDEJCTAJCS0JCUNvbXAKKyAqICAwCQkxCQktCQlPdGhlciAocHJlZml4KQorICogIDEJCTEJCS0JCUNvbXAgKyBPdGhlcgorICogIC0JCS0JCTAJCS1TcGVjCisgKiAgLQkJLQkJMQkJK1NwZWMKKyAqIAorICogRXhhbXBsZXM6CisgKiAmU2NodWgJCQk6IFNjaHVoLCBTY2h1aGUsIC4uLiBvbmx5IGZsZXhpb25zCisgKiAmU2NodWgrY29tcAkJOiBTY2h1aGUsIFR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtvdGhlcgkJOiBTY2h1aGUsIEFudGlzY2h1aGUuLi4gZmxleGlvbnMgYW5kIHByZWZpeGVkIHdmcyAobm8gY29tcG91bmRzKS4KKyAqICZTY2h1aCtjb21wK290aGVyOiBTY2h1aGUsIEFudGlzY2h1aGUsIFR1cm5zY2h1aGUsIEFudGl0dXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMgYW5kIAorICogCQkJCQkgIHByZWZpeGVkIHNpbmdsZSB3ZnMgKEFudGlzY2h1aGUpIGFuZCBwcmVmaXhlZCBjb21wb3VuZHMuCisgKiAmU2NodWgrc3BlYwkJOiAiQW50aSItU2NodWhlLCA2OGdlci1TY2h1aGUuLi4gbWF5IGJlIGNvbWJpbmVkIHdpdGggZXZlcnkgb3B0aW9uczogYWRkcworICogICAgICAgICAgICAgICAgICAgIHdmcyB3aXRoIGh5cGhlbiBhbmQvb3Igbm9uLWFscGhhYmV0aWMgY2hhcnMuCisgKiAKKyAqIENvbnZlcnNpb24gcnVsZXM6CisgKiAKKyAqICAmc2NobGllw59lbiAtPiBpbnRlcm5hbCBzZWFyY2ggZm9yICdzY2hsaWVzc2VuJywKKyAqICBiZWNhdXNlIEdsZW1tIG91dHB1dHMgJ3NzJyBmb3IgJ8OfJy4KKyAqICAKKyAqIENoYXJhY3RlciBFbmNvZGluZzoKKyAqIAorICogLSBXaGVuIGltcG9ydGluZyB3ZnMgdG8gdGhlIERlcmJ5IERhdGFiYXNlIHdpdGggZG9DdXJsR2xlbW1TZXJ2aWNlcy9pbmRleExlbW1hdGE6CisgKiAKKyAqICAgSU5QVVQ6IHdvcmRmb3JtIGxpc3QgaW4gW1VURi04XSA6IFVURi04IGlzIHRoZW4gY29udmVydGVkIHRvIExhdDEgZm9yIEdsZW1tLAorICogICAgICAgICAgdGhlIG91dHB1dCBvZiBHbGVtbSBbTGF0MV0gaXMgcmV0dXJuZWQgdG8gdGhlIEdsZW1tU2VydmljZXMgd2l0aG91dCByZWNvbnZlcnNpb24KKyAqICAgICAgICAgIHRvIFVURjggYW5kIGltcG9ydGVkIGludG8gRGVyYnkgRGF0YWJhc2UgdW5jaGFuZ2VkLgorICoJCQorICovCisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDQuMTEuMjEiOyAKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjIiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lUHJvcHMJCT0gIi9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyI7CisJCisJLy8gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlYWQgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgKHRoZXNlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMpOgorCXByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoIAkJPSAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lV2ZzIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmVyciI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVTY3JpcHQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCUBDb250ZXh0CisJcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZvdXQJPSBudWxsOworCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZmVycgk9IG51bGw7CQkKKwkJCisJLyogCisgCSAqIAorCSAqIC0gYWZ0ZXIgbG9hZFByb3BlcnRpZXMsIHNldHMgdGhlIGNsYXNzIHZhcmlhYmxlIHdpdGggbG9hZGVkIHByb3BlcnR5IHZhbHVlcy4KKwkgKiAKKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJR1NfV29ya2luZ1BhdGggCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgIkdTX1dvcmtpbmdQYXRoIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIik7CisJZm5hbWVXZnMJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lV2ZzIiwgCSAgICJnbF93ZnNfaW4udHh0Iik7CisJZm5hbWVXZnMJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVdmczsKKwlmbmFtZU91dAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVPdXQiLCAJICAgIkdsZW1tU2VydmljZXMubG9nIik7CisJZm5hbWVPdXQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZU91dDsKKwlmbmFtZUVycgkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVFcnIiLCAJICAgIkdsZW1tU2VydmljZXMuZXJyIik7CisJZm5hbWVFcnIJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUVycjsKKwlmbmFtZVNjcmlwdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVTY3JpcHQiLAkgICAiZG9HbGVtbSIpOworCWZuYW1lU2NyaXB0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVTY3JpcHQ7CisJZm5hbWVMZW1hdGEJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lTGVtYXRhIiwgICAgInRtcC9sZW0zIik7CisJZm5hbWVMZW1hdGEJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZUxlbWF0YTsKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qCisJICogIGxvZ19SZXF1ZXN0OgorCSAqICAKKwkgKiAgLSB3cml0ZSBpbmZvIGFib3V0IEFQSSBSZXF1ZXN0LgorCSAqICBQYXJhbWV0ZXJzOgorCSAqICByZXF1ZXN0UGF0aAk6IHBhdGggb2Ygd2ViYXBwIGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KKwkgKiAgZnVuYwkJOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSByZXF1ZXN0LgorCSAqICAKKwkgKiAgMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbG9nX1JlcXVlc3QoU3RyaW5nIHJlcXVlc3RQYXRoLCBTdHJpbmcgZnVuYykKKwkKKwl7CisJLy8gdHJhbnNmb3JtICJkYXRlVHRpbWUiIC0+ICJkYXRlIHRpbWUiOgorCQorCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCWZvdXQucHJpbnRmKCIjIyMgJXM6ICVzIDogdmVycz0nJXMnLCB2ZGF0ZT0nJXMnIHJlcXVlc3Q9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RQYXRoLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgCisJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwl9IC8vIGxvZ19SZXF1ZXN0CisJCQorCS8qIGZvcm1hdERiTmFtZQorCSAqIAorCSAqIC0gZ2V0cyBuYW1lIG9mIERhdGFiYXNlIHVzZWQgYnkgRGVyYnkgZnJvbSBwcm9wcyAKKwkgKiAgIGFuZCBmb3JtYXQgaXQgdG8gSFRNTC4KKwkgKiAgCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyBmb3JtYXREYk5hbWUoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJU3RyaW5nCisJCWRiTmFtZTsKKwlTdHJpbmcKKwkJZGJQYXRoID0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJaW50CisJCWogPSBkYlBhdGgubGFzdEluZGV4T2YoJy8nKTsKKwkKKwlpZiggaiA+IDAgKQorCQlkYk5hbWUgPSBkYlBhdGguc3Vic3RyaW5nKGorMSk7CisJZWxzZQorCQlkYk5hbWUgPSBkYlBhdGg7CisJCisJcmV0dXJuIGRiTmFtZTsgLy8gIjxwPjxiPkRhdGFiYXNlOiAiICsgZGJOYW1lICsgIjwvYj48L3A+XG4iOworCX0gLy8gZm9ybWF0RGJOYW1lCisKKwkvKgorCSAqIGNsb3NlTG9nU3RyZWFtczoKKwkgKiAKKwkgKiAtIGNsb3NlIHRoZSBmb3V0L2ZlcnIgbG9nIHN0cmVhbXMuCisJICogCisJICogMjYuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgY2xvc2VMb2dTdHJlYW1zKCkKKwkKKwl7CisJaWYoIGZvdXQgIT0gbnVsbCkKKwkJZm91dC5jbG9zZSgpOworCWZvdXQgPSBudWxsOworCQorCWlmKCBmZXJyICE9IG51bGwgKQorCQlmZXJyLmNsb3NlKCk7CisJZmVyciA9IG51bGw7CisJfSAvLyBjbG9zZUxvZ1N0cmVhbXMKKwkKKwkvKiBpbml0X2FuZF9sb2dfUmVxdWVzdAorCSAqIAorCSAqIC0gbG9hZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMsIHNldHMgR2xlbW1TZXJ2aWNlcyBjb25zdGFudHMKKwkgKiAgIGFuZCBsb2dzIHRoZSByZXF1ZXN0LgorCSAqIC0gbG9hZCBwcm9wZXJ0aWVzIGFuZCBzZXQgY29uc3RhbnRzIGJlZm9yZSBsb2dnaW5nIGFueXRoaW5nLCBiZWNhdXNlCisJICogICBsb2dnaW5nIHdpbGwgYmUgZG9uZSBpbnRvIHRoZSBsYXN0IHN0ZG91dC9zdGRlcnIgb3BlbmVkIGluIGdsYXNzZmlzaCdzIEpWTSwKKwkgKiAgIGUuZy4gaW4gdGhlIGxvZyBvZiBhbm90aGVyIFNlcnZpY2UuCisJICogMTkuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIFByb3BlcnRpZXMgaW5pdF9hbmRfbG9nX1JlcXVlc3QoU3RyaW5nIGZ1bmMsIFN0cmluZyByZXF1ZXN0UGF0aCkKKwkKKwl7CisJU3RyaW5nCisJCXJlYWxQYXRoID0gc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoZm5hbWVQcm9wcyk7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtIChpZiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJUHJvcGVydGllcworCQlwcm9wcyA9IFV0aWxzLmxvYWRQcm9wZXJ0aWVzKHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcyksIGZuYW1lUHJvcHMsIHJlYWxQYXRoLCBmYWxzZSk7CisJCisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIGZvdXQgYW5kIGZlcnIgYXMgcmVwbGFjZW1lbnQgZm9yIHN0ZG91dC9zdGRlcnIgZm9yIHVzZSBpbiBHbGVtbVNlcnZpY2VzLgorCS8vIGRvIG5vdCB1c2Ugb3IgcmVkaXJlY3QgU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciwgYXMgdGhleSB3aWxsIGJlIHJlZGlyZWN0ZWQKKwkvLyBieSBvdGhlciBTZXJ2aWNlcyBpbiB0aGUgc2FtZSBnbGFzc2Zpc2ggSlZNLCBlLmcuIGJ5IHRoZSBXZm9ybVNlcnZpY2VzLgorCWZvdXQgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVPdXQpOworCWZlcnIgPSBVdGlscy5zZXRMb2dTdHJlYW0oZm5hbWVFcnIpOworCQorCS8vVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkKKwlsb2dfUmVxdWVzdChyZXF1ZXN0UGF0aCwgZnVuYyk7CisJCisJcmV0dXJuIHByb3BzOworCX0gLy8gaW5pdF9hbmRfbG9nX1JlcXVlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJZmluYWwgU3RyaW5nIGZ1bmMgPSAiZG9HRVRfc3RhdHVzIjsKKwlTdHJpbmcKKwkJc3RhdHVzOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3N0YXR1cy8iKTsKKwkKKwkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkKKwlzdGF0dXMgPSBTdHJpbmcuZm9ybWF0KAkiPGh0bWw+XG4iICsKKwkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5WZXJzaW9uIGRhdGU8L2I+IDogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+cHJvcGVydGllczwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPmRhdGFiYXNlPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSI8L2h0bWw+IiwKKwkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIiksCisJCQkJCQkJc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSA9PSBudWxsID8gIm5vdCBmb3VuZCIgOgorCQkJCQkJCQlwcm9wcy5pc0VtcHR5KCkgPyAiZW1wdHkiIDogImxvYWRlZCIsCisJCQkJCQkJZm9ybWF0RGJOYW1lKHByb3BzKQorCQkJCQkJCSk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJY2xvc2VMb2dTdHJlYW1zKCk7CisJcmV0dXJuIHN0YXR1czsJCisJCQorCX0gLy8gZG9HRVRfc3RhdHVzCisJCisJLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAKKwkgKiBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhOgorCSAqIAorCSAqIFBPU1Q6IC9pbmRleC9hZGQve2RhdGFiYXNlbmFtZX06IHRleHQvcGxhaW4KKwkgKiAKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGxpc3QJCSAJOiB0aGUgbGlzdCBvZiB3ZnMgc2VudCBpbiB0aGUgYm9keSBvZiB0aGUgUE9TVCByZXF1ZXN0LgorCSAqIGRicGF0aEVuY29kZWQ6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgdGhlIGxlbW1hK3dmcyBhcmUgdG8gYmUgc3RvcmVkLgorCSAqICAgICAgICAgICAgIAkgIGVuY29kZWQgYXMgIi5ob21lLnVzZXIuS29yQVAuLi4uIiwgbXVzdCBiZSBjb252ZXJ0ZWQgdG8KKwkgKiAgICAgICAgICAgIAkgICIvaG9tZS91c2VyL0tvckFQLy4uLiIKKwkgKiAgICAgICAgIAkJICBJTVBPUlRBTlQ6IGRvIG5vdCB1c2UgYSAnLicgZm9yIGVuY29kaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBhICcvJy4KKwkgKiBOb3RlcyAgICAgOgorCSAqIC0gYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UgbG9jYXRlZCBhdCAnZGF0YWJhc2VuYW1lJy4KKwkgKiAtIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkIGludG8gYSBEZXJieSBkYXRhYmFzZS4KKwkgKiBJbnB1dAkgOiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKiAwNC4xMS4yMS9GQgorCSAqIC0gc3VibWl0dGVkIGRhdGFiYXNlIHBhdGguCisJICovCisJCisJQFBhdGgoImFkZC97ZGF0YWJhc2VwYXRofSIpIAorCUBQT1NUIAorCUBDb25zdW1lcygidGV4dC9wbGFpbiIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisJCQkJCQkJKAorCQkJCQkJCVN0cmluZyAJCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIFN0cmluZyBkYnBhdGhFbmNvZGVkCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpLAorCQlkYnBhdGg7CisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBudWxsOworCU91dHB1dFN0cmVhbSAKKwkJb3M7CisJYm9vbGVhbgorCQliRG9uZSA9IGZhbHNlOworCVN0cmluZworCQltc2c7CisJaW50CisJCW5FcnJvcnMgPSAwOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvYWRkL3tkYnBhdGh9Iik7CisJCisJZGJwYXRoID0gZGJwYXRoRW5jb2RlZC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VjLzEwNDBkZmQ5ODAzYzAwMWMxNWU0YzdhNzc4OTE3NzNmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lYy8xMDQwZGZkOTgwM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzI0ZmNjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9lYy8xMDQwZGZkOTgwM2MwMDFjMTVlNGM3YTc3ODkxNzczZgpAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorIDxoZWFkPgorICA8dGl0bGU+V29yZGZvcm0gU2VydmljZXMgKGluY2x1ZGluZyBHbGVtbSBTZXJ2aWNlcyk8L3RpdGxlPgorICA8IS0tIGxvYWQgY2xpZW50IGphdmFzY3JpcHQgbGlicmFyeSAtLT4KKyAgPCEtLSAgbGl2ZS12ZXJzaW9uOiBzY3JpcHQgc3JjPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9qcy9rb3JhcC1wbHVnaW4tMC4yLmpzIgorICAgICAgICAgIGRhdGEtc2VydmVyPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS8iPjwvc2NyaXB0IC0tPgorICA8IS0tICBUZXN0dmVyc2lvbjogLS0+CisgIDxzY3JpcHQgc3JjPSJodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9pbnN0YW5jZS90ZXN0L2pzL2tvcmFwLXBsdWdpbi0wLjIuanMiCisgICAgICAgICAgZGF0YS1zZXJ2ZXI9Imh0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL2luc3RhbmNlL3Rlc3QiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgPHNjcmlwdD4KKyAgICAgICBsZXQgZGF0YSA9IHsKKyAgICAgICAgICdhY3Rpb24nIDogJ3BpcGUnLAorICAgICAgICAgPCEtLSBLb3JhbFF1ZXJ5IG1pdCBQT1NUIFJlcXVlc3QgYW4gZGllc2VuIHNlcnZpY2Ugc2NoaWNrZW47IGRhaGludGVyIHN0ZWh0IGRlciBXb3JkZm9ybSBTZXJ2aWNlLCBkYWhpbnRlciBkZXIgR2xlbW0gU2VydmljZS4gLS0+CisgICAgICAgICA8IS0tIG9obmUgcHJveHk6ICdzZXJ2aWNlJyA6ICdodHRwOi8vYzByNGZ0Lmlkcy1tYW5uaGVpbS5kZTo0MDkxMy93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVC93Zm9ybVNlcnZpY2VzL3F1ZXJ5JyAtLT4KKyAgICAgICAgIDwhLS0gbWl0IHByb3h5IDogJ3NlcnZpY2UnIDogJ2h0dHBzOi8va29yYXAuaWRzLW1hbm5oZWltLmRlL3Byb3h5L2MwcjRmdC93Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVC93Zm9ybVNlcnZpY2VzL3F1ZXJ5JyAtLT4KKyAgICAgICAgICdzZXJ2aWNlJyA6ICdodHRwczovL2tvcmFwLmlkcy1tYW5uaGVpbS5kZS9wcm94eS9jMHI0ZnQvd2Zvcm1TZXJ2aWNlcy93Zm9ybVNlcnZpY2VzL3F1ZXJ5JworICAgICAgIH07CisKKyAgICAgICBmdW5jdGlvbiBwbHVnaW5pdCAocCkgeworICAgICAgICAgcC5vbk1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAgaWYgKG1zZy5rZXkgPT0gJ2dsZW1tJykgeworICAgICAgICAgICAgIGlmIChtc2cudmFsdWUpIHsKKyAgICAgICAgICAgICAgIGRhdGFbJ2pvYiddID0gJ2FkZCc7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgZGF0YVsnam9iJ10gPSAnZGVsJzsKKyAgICAgICAgICAgICB9OworICAgICAgICAgICAgIEtvckFQbHVnaW4uc2VuZE1zZyhkYXRhKTsKKyAgICAgICAgICAgfTsKKyAgICAgICAgIH07CisgICAgICAgfTsKKyAgICAgPC9zY3JpcHQ+CisgICA8L2JvZHk+Cis8L2h0bWw+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWUvMTBkMTAyMWRhZjJhMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VlLzEwZDEwMjFkYWYyYTAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzA0NDIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VlLzEwZDEwMjFkYWYyYTAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNjg0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK0BQYXRoKCIvaW5kZXgiKQorCitwdWJsaWMgY2xhc3MgR2xlbW1TZXJ2aWNlcyB7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbkRhdGUJPSAiMDYuMTAuMjEiOyAvLyIxNy4wNi4yMCI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4xIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMubG9nIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUVyciAJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJPSBHU19Xb3JraW5nUGF0aCArICIvZG9HbGVtbSI7CisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVMZW1hdGEJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwkKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX1RFWFQgCT0gMTsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0pTT04JCT0gMjsKKwlmaW5hbCBwcml2YXRlIGludAlBQ0NfRk9STUFUX0hUTUwJCT0gMzsKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCQlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCQlTdHJpbmcKKwkJCXN0YXR1czsKKwkJVXRpbHMKKwkJCXUgPSBuZXcgVXRpbHMoKTsKKwkJUHJvcGVydGllcworCQkJcHJvcHM7CisJCQorCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQlGaWxlSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IFNlcnZsZXQuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7IC8vbmV3IEZpbGVJbnB1dAorCQkvLyBlbmQgb2YgcmVhZCB0ZXN0CisJCQorCQkvLyB0ZXN0CisJCS8qCisJCXByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCisJCSAqIHByb3BzLnNldFByb3BlcnR5KCJwIiwgInRlc3QiKTsKKwkJICoKKwkJRmlsZU91dHB1dFN0cmVhbSBvdXQ7CisJCXRyeSB7CisJCQlvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiZ2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIik7CisJCQlwcm9wcy5zdG9yZShvdXQsICAidGVzdCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMiKTsKKwkJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9OworCQkqLworCQkKKwkJLy8gZW5kIG90ZXN0CisJCQorCQkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwkJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisJCVN5c3RlbS5vdXQucHJpbnRmKCJBUEk6ICVzOiAvaW5kZXgvc3RhdHVzLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkJU3lzdGVtLm91dC5wcmludGYoIiMjI1xuIik7CisKKwkJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJCSAgIAkiIDxwPjxiPlZlcnNpb248L2I+IDogJXM8L3A+IiArCisJCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlJlcXVlc3QgdGltZTwvYj46ICVzPC9wPiIgKworCQkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJCXZlcnNpb25EYXRlLAorCQkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBkb25lLlxuIiwgZnVuYyk7CisJCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUE9TVDogL2luZGV4L2FkZC86IHRleHQvcGxhaW4KKwkgKiBhZGRzIGEgbGlzdCBvZiBuZXcgd29yZGZvcm1zIHRvIHRoZSBHbGVtbVNlcnZpY2UncyBEYXRhYmFzZS4KKwkgKiBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZAorCSAqIGludG8gdGhlIGRhdGFiYXNlLgorCSAqIElucHV0OiB3b3JkZm9ybSBkYXRhIGV4cGVjdGVkIGluIFtVVEYtOF0uCisJICogMjUuMTEuMTkvRkIKKwkgKi8KKwlAUGF0aCgiYWRkIikgQFBPU1QgQENvbnN1bWVzKCJ0ZXh0L3BsYWluIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGltcG9ydExlbW1hRGF0YShTdHJpbmcgbGlzdCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9hZGQvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwkKKwkvLyBXcml0ZSBzdWJtaXR0ZWQgbGlzdCBvZiB3b3JkZm9ybXMgdG8gZmlsZToKKwl0cnkKKwkJeworCQlvcyA9IEZpbGVzLm5ld091dHB1dFN0cmVhbShwKTsKKwkJb3Mud3JpdGUobGlzdC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLklTT184ODU5XzEpKTsKKwkgICAgb3MuY2xvc2UoKTsKKwkgICAgYkRvbmUgPSB0cnVlOworCSAgICBTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBmaWxlICclcycgYmVzY2hyaWViZW4uXG4iLCBmdW5jLCBmbmFtZVdmcyk7CisJICAgIH0KKwljYXRjaChJT0V4Y2VwdGlvbiBlKQorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgCisJaWYoIGJEb25lICkKKwkJbXNnID0gIjxwPkxpc3Qgd3JpdHRlbiB0byBmaWxlOiAiICsgcC50b1N0cmluZygpICsgIjwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPjxiPkZpbGUgRXJyb3I6IDwvYj4gY2Fubm90IHdyaXRlIHRvICIgKyBwLnRvU3RyaW5nKCkgKyAiITwvcD4iOworCQorCS8qCisJICogIGV4ZWN1dGUgR2xlbW0gc2hlbGwgc2NyaXB0OgorCSAqLworCVN0cmluZworCQltc2dHbGVtbVNjcmlwdCwgbXNnSW1wb3J0OworCWludCAKKwkJciA9IFV0aWxzLmV4ZWN1dGVTaGVsbFNjcmlwdChmbmFtZVNjcmlwdCwgZm5hbWVXZnMpOworCQorCWlmKCByID09IDAgKQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBBdXNm77+9aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCSAgIG1zZyArIG1zZ0dsZW1tU2NyaXB0ICsKKwkJICAgIjwvaHRtbD4iOyAKKwkKKwkKKwkvLyBSZWFkIGxlbW1hdGl6ZWQgZGF0YSBhbmQgc3RvcmUgdGhlbSBpbnRvIGRhdGFiYXNlOgorCW5FcnJvcnMgPSBHbGVtbURCLmltcG9ydEdsZW1tTGVtbWF0YShmbmFtZUxlbWF0YSk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJfQorCisJLyogdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcygpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCXRhYmxlLmFwcGVuZCgiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iKTsKKwllbHNlCisJCXsKKwkJdGFibGUuYXBwZW5kKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiMlwiIGNlbGxzcGFjaW5nPVwiMlwiPlxuIik7CisJCisJCWZvcihpPTA7IGk8ZGJJbmZvLmNvdW50cy5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCW1zZyA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLkdFUk1BTiwgIiA8dHI+PHRkPjxiPkFuemFobCAlczwvYj48L3RkPjx0ZCAlcz4lLGQ8L3RkPjwvdHI+XG4iLCBkYkluZm8uY291bnRMYWJlbHNbaV0sIGFscmksIGRiSW5mby5jb3VudHNbaV0pOworCQkJdGFibGUuYXBwZW5kKG1zZyk7CisJCQl9CisJCXRhYmxlLmFwcGVuZCgiPC90YWJsZT4iKTsKKwkJfQorCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlICsgcmV0dXJuVHJhaWxlcjsgIAorCX0gLy8gdmlld0RCSW5mbworCisKKwkvKiB2aWV3TGVtbWFJbmZvSFRNTDoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDEzLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3TGVtbWFJbmZvSFRNTCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvSFRNTCI7CisJaW50CisJCWksIHI7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvL2xlbW1hPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIiAtIFN0YXR1czogPGk+V29yayBpbiBwcm9ncmVzcy4uLiE8L2k+KTwvaDQ+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnLlxuIiwgZnVuYywgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyIVxuIiwgIGZ1bmMpOyAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+RXJyb3I6PC9iPiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlcyE8L3A+XG4iKTsgCisJCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOworCQl9CisJCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwl0YWJsZS5hcHBlbmQoIjx0aGVhZCAiICsgYmFja2dyb3VuZGNvbG9yICsgIj5cbiIpOworCWlmKCAhb3B0aW9ucy5lcXVhbHMoInVuZGVmIikpCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxL3Byb3AyL3NwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYSk7CisKKwl0YWJsZS5hcHBlbmQobXNnKTsKKwkKKwltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPjxiPnByb3AxID0gPGk+JyVzJzwvaT4gJmFtcDsgcHJvcDIgPSA8aT4nJXMnPC9pPiAmYW1wOyBzcGVjID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsIAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiLSIgOiBsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICIrIiA6ICJ1bmRlZiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5zcGVjICA9PSAxID8gIisiIDogInVuZGVmIik7CisJdGFibGUuYXBwZW5kKG1zZyk7CisKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJaWYoIGxlbW1hSW5mby5uV2ZzID09IDAgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5rZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ+PC90cj5cbiI7CisJZWxzZSBpZiggbGVtbWFJbmZvLm5XZnMgPCAwIHx8IHdvcmRmb3JtcyA9PSBudWxsICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+RmVobGVyIGF1ZmdldHJldGVuOiBrZWluZSBXb3J0Zm9ybWVuIGdlZnVuZGVuITwvdGQ8L3RyPlxuIjsKKwllbHNlCisJCXRhYmxlLmFwcGVuZCgiPHRyPjx0ZD48Yj5BbnouIGdlZnVuZGVuZSBXb3J0Zm9ybWVuPC9iPiA9ICIgKyBsZW1tYUluZm8ubldmcyArICI8L3RkPjwvdHI+XG4iKTsKKwkJCisJdGFibGUuYXBwZW5kKCI8L3RoZWFkPlxuIik7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSB2aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogc3RhcnRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBHbGVtbVNlcnZpY2VzICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb25EYXRlLCBsZW1tYSwgb3B0aW9ucyk7CisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIAorCQkJZnVuYywgbGVtbWEsIG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlzd2l0Y2goYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJCWxlbW1hUmVzcCA9IGxlbW1hSW5mby5yZXMySlNPTigpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJLy8gbm90IGltcGxlbWVudGVkIGhlcmUsIHNlZSB2aWV3TGVtbWFJbmZvSFRNTCgpLgorCQlyZXN1bHQgPSBudWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJfQorCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCXN3aXRjaCggYWNjZXB0ZWRGb3JtYXQpCisJCXsKKwljYXNlIEFDQ19GT1JNQVRfVEVYVDoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggcmVzdWx0ICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eShyZXN1bHQpLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkoIiIpLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCQorCWNhc2UgQUNDX0ZPUk1BVF9KU09OOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCBsZW1tYVJlc3AuaGVhZF9lcnJNZXNzICE9IG51bGwgKQorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQUNDRVBURUQpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQllbHNlLy8gb24gZXJyb3JzOgorCQkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisJCS8vIGJyZWFrOworCisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHByb2NlZHVyZSEiKS5idWlsZCgpOworCWRlZmF1bHQ6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fWE1MX1RZUEUpLmVudGl0eSgiaW50ZXJuYWwgZXJyb3I6IHJlcXVlc3RlZCBGb3JtYXQgaXMgbm90IGtub3duISIpLmJ1aWxkKCk7CisJCX0KKworCisJfSAvLyB2aWV3TGVtbWFJbmZvVEVYVAorCQorCS8qCisJICogVGVzdCBmdW5jdGlvbjogCisJICogUmV0dXJucyBjdXJyZW50IGNvbnRlbnQgb2YgTGVtbWEgRGF0YWJhc2UuCisJICogMDkuMTAuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJ0ZXN0L2luZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0RiQ29udGVudCgpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0RiQ29udGVudCI7CisJaW50CisJCXI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJU3RyaW5nCisJCXJldHVybkhlYWRlciA9ICI8aHRtbD48aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC90ZXN0L2luZm88L2gxPiIgKworCQkJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iOworCVN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCVN0cmluZworCQltc2c7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvOworCQorCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJLy9TeXN0ZW0ub3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZWYvOTBlMzZlZjQ4NzJiMDAxYzFjNDFjZTU1OWVhNWUxNmIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VmLzkwZTM2ZWY0ODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2VmLzkwZTM2ZWY0ODcyYjAwMWMxYzQxY2U1NTllYTVlMTZiCkBAIC0wLDAgKzEsNzE0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJU3RyaW5nCisJCQlwcm9wTmFtZSA9ICJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQkvLyByZWFkIHRlc3QKKwkJcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCQkvL0h0dHBTZXJ2bGV0Q29udGV4dAorCQkKKwkJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCUlucHV0U3RyZWFtCisJCQlpblByb3AgPSBHbGVtbVNlcnZpY2VzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwcm9wTmFtZSk7CisJCWlmKCBpblByb3AgPT0gbnVsbCApCisJCQl7CisJCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBmb3JtYXQsIGFyZ3MpCisJCQl9CisJCQorCQl0cnkgeworCQkJcHJvcHMubG9hZChpblByb3ApOworCQkJU2V0PEVudHJ5PE9iamVjdCxPYmplY3Q+PgorCQkJCXByb3BzU2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKKwkJCQorCQkJZm9yKEVudHJ5PE9iamVjdCwgT2JqZWN0PiBwcm9wRW50cnkgOiBwcm9wc1NldCkKKwkJCQl7CisJCQkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcCAlcyA9ICclcycuXG4iLCBmdW5jLCBwcm9wRW50cnkuZ2V0S2V5KCksIHByb3BFbnRyeS5nZXRWYWx1ZSgpKTsKKwkJCQl9CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YvODAwMDVhMGY1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YvODAwMDVhMGY1ZDNlMDAxYzEwMzVjMWVhZjM4YWY1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlMTFiMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZi84MDAwNWEwZjVkM2UwMDFjMTAzNWMxZWFmMzhhZjU5MApAQCAtMCwwICsxLDgwNSBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAgICBjaGVja0RlcmJ5Q29ubmVjdGlvbjoKKwkgKiAKKwkgKiBjaGVjayBpZiBEZXJieSBOZXR3b3JrIFNlcnZlciBpcyBhdmFpbGFibGUuCisJICogUmV0dXJuczogMCAoPU9LKSBvciAtMSAob24gZXJyb3IpLgorCSAqIDA1LjExLjIxL0ZCCisJICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgY2hlY2tEZXJieUNvbm5lY3Rpb24oKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAiY2hlY2tEZXJieUNvbm5lY3Rpb24iOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyB0byAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeyAvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBjaGVja19EZXJieUNvbm5lY3Rpb24KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogCQkJCQlpbXBvcnRHbGVtbUxlbWF0YQorCSAqIFBhcmFtZXRlcnM6CisJICogZm4JCSA6IGFic29sdXRlIGZpbGUgbmFtZSBvZiBHTEVNTSBvdXRwdXQgW0lTTzg4NTktMV0gZXhwZWN0ZWQsIG5vdCBVVEYtOCEKKwkgKiBwcm9wcwkgOiBQcm9wZXJ0aWVzIHZvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMgdG8gc2V0IGNvbnN0YW50cyBuZWVkZWQKKwkgKiAJCQkgICBpbiB0aGlzIGNsYXNzLgorCSAqIGRicGF0aAkgOiBsb2NhdGlvbiArIG5hbWUgb2YgZGF0YWJhc2Ugd2hlcmUgdG8gc3RvcmUgbGVtbWF0YSt3ZnMuCisJICogUmV0dXJucwkgOiAwPU9LLCAtMTogZ2VuZXJhbCBlcnJvcjsgPiAwIDogbm8uIG9mIGxlbW1hdGEgbm90IHN0b3JlZC4KKwkgKiAKKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIGR5bmFtaWNhbGx5IGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqIDA0LjExLjIxL0ZCIGRicGF0aC4KKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YShTdHJpbmcgZm4sIFByb3BlcnRpZXMgcHJvcHMsIGZpbmFsIFN0cmluZyBkYnBhdGgpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YSI7CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4gPSBudWxsOworCWludAorCQluRXJyb3JzOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyB3aGVuIGluZGV4aW5nIGRhdGEgaW50byB0aGUgZGF0YWJhc2UsIHNlbGVjdCB0aGUgc3VibWl0dGVkIGRicGF0aCwKKwkvLyAobm90IHRoZSBvbmUgc3RvcmVkIGluIHRoZSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCWRlcmJ5REJVUkwgPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGRicGF0aDsKKwkKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEQkxlbW1hdGEoKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiBzdG9yZXMgbGlzdCBvZiBsZW1tYXRhICsgaW5mb3MgaW50byBEZXJieSBkYi4KKwkgKiBGaWxlIGZvcm1hdDogIkxlbW1hIERlY29tcG9zaXRpb24gV2YiLAorCSAqICAgICAgICAgICAgICBlLmcuOiAiSMOkdXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogMDQuMTEuMjEvRkIgdHVybiBhdXRvY29tbWl0IG9mZiB0byBhY2NlbGVyYXRlIGh1Z2UgYW1vdW50IG9mIGluc2VydGlvbnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQluSW5zZXJ0ZWQgPSAwLAkvLyBuby4gb2YgbGVtbWEvd2YgcGFpcnMgaW1wb3J0ZWQuCisJCXJldCA9IDA7IC8vIE9LLgorCWJvb2xlYW4KKwkJY29udGFpbnNTcGVjOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZSwKKwkvLyBzZXQgQXV0b2NvbW1pdCA9IGZhbHNlIHRvIGFjY2VsZXJhdGUgaW5zZXJ0aW9uczoKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJY29uLnNldEF1dG9Db21taXQoZmFsc2UpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZCAoYXV0b0NvbW1pdD1vZmYpLlxuIiwgZnVuYyk7CisJCQorCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCXN0bXRQcmVwID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0UHJlcGFyZWRRdWVyeSk7CisJCWVsc2UKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisKKwkJd2hpbGUoIChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoICE9IDMgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6ICclcycgaGFzICVkIGNvbXBvbmVudHMhIEV4cGVjdGVkID0gMyEgQ2Fubm90IGJlIHN0b3JlZCFcbiIsIGZ1bmMsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJCW5FcnJvcnMrKzsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQkKKwkJCS8vIEdldCBJbmZvLCBpZiB3b3JkZm9ybSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgJy0nLCBpbnRlcnB1bmN0aW9uIGV0Yy46CisJCQkvLyBsZW1tYUluZm9bMl0gPSB3b3JkZm9ybS4KKwkJCWNvbnRhaW5zU3BlYyA9IExlbW1hSW5mby5pc1dmU3BlY2lhbENhc2UobGVtbWFJbmZvWzJdKTsKKwkJCS8vIHN0b3JlIGludG8gREI6CisJCQlpZiggdXNlUHJlcGFyZWRTdG10ICkKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZChzdG10UHJlcCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB3cml0ZURCTGVtbWFJbmZvcyhzdG10LCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJCisJCQlpZiggcmV0ICE9IDAgKQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBzdG9yZSBsZW1tYSAnJXMnIGludG8gREIhIChyZXQ9JWQpXG4iLCBmdW5jLCBsaW5lLCByZXQpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJZWxzZQorCQkJCW5JbnNlcnRlZCsrOworCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IAorCQl7IAorCQl0cnkgeworCQkJLy8gaW1wb3J0YW50OiBub3cgY29tbWl0LCBhcyBhdXRvQ29tbWl0IGlzIGRlYWN0aXZhdGVkLAorCQkJLy8gdGhpcyBhbHNvIHJlbW92ZXMgZGF0YWJhc2UgbG9ja3M6CisJCQljb24uY29tbWl0KCk7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbW1pdCBzdWNjZXNzZnVsbC5cbiIsIGZ1bmMpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbW1pdCBhdCB0aGUgZW5kIG9mIHRoZSB3ZnMgbGlzdCBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIAorCQkJCXN0bXQuY2xvc2UoKTsKKwkJCWlmKCBzdG10UHJlcCAhPSBudWxsICkgCisJCQkJc3RtdFByZXAuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiSW5mbyA6ICVzOiBuby4gb2YgbGVtbWF0YS93ZiBwYWlycyBpbnNlcnRlZCA9ICVkLlxuIiwgZnVuYywgbkluc2VydGVkKTsKKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAwNS4xLjIxL0ZCIHJlamVjdCBsZW1tYS93ZiA+IDY0IGNoYXJzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJZmluYWwgYm9vbGVhbgorCQliTG9nID0gZmFsc2U7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJLy8gY2hlY2sgc2l6ZSBvZiB3ZiBhbmQgbGVtbWEgYWdhaW5zdCBmaWVsZCBzaXplIGluIHRhYmxlIEdsZW1tTGVtbWF0YToKKwlpZiggbGVtbWEubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhMZW1tYVNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGxlbW1hIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4TGVtbWFTaXplLCBsZW1tYSk7CisJCXJldHVybiA0OworCQl9CisJaWYoIHdmLmxlbmd0aCgpID49IEdsZW1tREIubWF4V2ZTaXplICkgCisJCXsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3ZiByZWplY3RlZCAoPiAlZCk6ICclcychXG4iLAorCQkJCWZ1bmMsIG1heFdmU2l6ZSwgd2YpOworCQlyZXR1cm4gNTsKKwkJfQorCSAKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgCisJLy8gZm9yIGxvZ2luZyBvbmx5OgorCXNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwlpZiggYkxvZyApCisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBmaWxsaW5nIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0nJWInIHByb3AyPSclYicgc3BlYz0nJWInIVxuIiwgIAorCQkJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJaWYoICsrbkV4Y2VwdFN0bXQgPD0gMSApCisJCQllMS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhIChuPSVkKVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYywgbik7CisgCQkJcmV0dXJuIDI7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0SW5zZXJ0IDw9IDEgKQorCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDM7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YvZTAwYTk5Zjk5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YvZTAwYTk5Zjk5NDFhMDAxYTE5YjI4NzVkZTAyNzJjNmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5ODhiNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZi9lMDBhOTlmOTk0MWEwMDFhMTliMjg3NWRlMDI3MmM2YwpAQCAtMCwwICsxLDYzIEBACis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiAKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5kZS5rb3JhcC5zZXJ2aWNlczwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+R2xlbW1TZXJ2aWNlczI8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICA8bmFtZT5HbGVtbVNlcnZpY2VzPC9uYW1lPgorICAKKyAgPGRlc2NyaXB0aW9uPlJFU1RmdWxsIEdsZW1tU2VydmljZXMgZsO8ciBLb3JBUDwvZGVzY3JpcHRpb24+CisgIAorICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjMuOC4xPC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgPC9kZXBlbmRlbmN5PgorICAgPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L2phdmF4LndzLnJzL2phdmF4LndzLnJzLWFwaSAtLT4KKyAgIDxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmphdmF4LndzLnJzLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorICAKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjMuNy4wPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8c291cmNlPjEuODwvc291cmNlPgorICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+My4yLjE8L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgorICAgICAgICAgIDx3YXJTb3VyY2VEaXJlY3Rvcnk+V2ViQ29udGVudDwvd2FyU291cmNlRGlyZWN0b3J5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgIDx3ZWJYbWw+V2ViQ29udGVudFxXRUItSU5GXHdlYi54bWw8L3dlYlhtbD4KKyAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgICAgPGZpbmFsTmFtZT5HbGVtbVNlcnZpY2VzPC9maW5hbE5hbWU+CisgIDwvYnVpbGQ+CisgIAorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjMvNDAyYTU2YjU0YTNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YzLzQwMmE1NmI1NGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZjMzOTYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2YzLzQwMmE1NmI1NGEzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsNzE0IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKK2ltcG9ydCBqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7CitpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKK3B1YmxpYyBjbGFzcyBHbGVtbURCCisKK3sKKwlzdGF0aWMgcHVibGljIFN0cmluZyBkYlRhYmxlIAk9ICJHbGVtbUxlbW1hdGEiOworCXN0YXRpYyBTdHJpbmcgZGJMZW1tYSAJCSAJPSAibGVtbWEiOworCXN0YXRpYyBTdHJpbmcgZGJXZgkgCQkJPSAid2YiOworCXN0YXRpYyBTdHJpbmcgZGJQcm9wMSAJCQk9ICJwcm9wMSI7CisJc3RhdGljIFN0cmluZyBkYlByb3AyIAkJCT0gInByb3AyIjsKKworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAob3ZlcndyaXR0ZW4gYnkgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzKToKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm5hbWVEQiA9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzZXJ2ZXJIb3N0ID0gIi8vbG9jYWxob3N0OjE1MjcvIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkvLyBEZXJieSBEYXRhYmFzZSBhY2Nlc3MgKGZpbmFsIGFzc2lnbm1lbnRzKToKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJFbWIgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIjsKKwlmaW5hbCBwcml2YXRlICBTdHJpbmcgZGVyYnlEcml2ZXJDbGllbnQgPSAib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciI7CisKKwlmaW5hbCBzdGF0aWMgYm9vbGVhbgorCQl1c2VQcmVwYXJlZFN0bXQgPSB0cnVlOyAvLyAxPXVzZSBQcmVwYXJlZFN0YXRlbWVudCBhbmQgbm90IFN0YXRlbWVudC4KKwkKKwkvLyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQ6IGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLgorCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UXVlcnkgPSAiSU5TRVJUIGludG8gIiArIGRiVGFibGUgKyAiIFZBTFVFUyAoJyVzJywgJyVzJywgJyVzJywgJyVzJywgJyVzJykiOworCXN0YXRpYyBTdHJpbmcgaW5zZXJ0UHJlcGFyZWRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisJCisJLyoKKwkgKiBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkgKiAKKwkgKiBBcmd1bWVudHM6CisJICogcHJvcHMJOiBQcm9wZXJ0aWVzIGxvYWRlZCBieSB0aGUgR2xlbW1TZXJ2aWNlcy4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgZnVuY3Rpb24gbG9hZHMgb25seSB0aG9zZSBDb25zdGFudHMgbmVlZGVkIGluIHRoaXMgY2xhc3MuCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzCXByb3BzKQorCQorCXsKKwlmbmFtZURCCQkgCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lREIiLCAJIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCXNlcnZlckhvc3QJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgInNlcnZlckhvc3QiLAkiLy9sb2NhbGhvc3Q6MTUyNy8iKTsKKwlkZXJieURCVVJMIAkJPSAiamRiYzpkZXJieToiICsgc2VydmVySG9zdCArIGZuYW1lREI7CisJCQkKKwl9IC8vIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCisJLy8gb3BlbiByZWFkZXIgb24gR2xlbW0gTGVtbWF0YToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQlpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmbikpOworCQkKKwkJbkVycm9ycyA9IHdyaXRlREJMZW1tYXRhKGluKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIHJlYWRpbmcgZnJvbSAnJXMnIVxuIiwgZnVuYywgZm4pOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8vIGNsb3NlIFJlYWRlcjoKKwl0cnkgeworCQlpbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCW5FcnJvcnMgPSAtMTsKKwkJfQorCQorIAlpZiggbkVycm9ycyA9PSAwICkKKyAJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0IGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIiwgZnVuYyk7CisgCWVsc2UKKyAJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkRlYnVnOiAlczogSW1wb3J0OiAlZCBFcnJvcnMhXG4iLCBmdW5jLCBuRXJyb3JzKTsKKyAJCisJcmV0dXJuIG5FcnJvcnM7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGEKKwkKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogd3JpdGVEQkxlbW1hdGEoKQorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJI77+9dXNlciArLSBIYXVzIi4KKwkgKiBSZXR1cm5zOiAwID0gT0sgb3IgLTE6IGdlbmVyYWwgZXJyb3Igb3IgPiAwOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIDA5LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWF0YShCdWZmZXJlZFJlYWRlciBpbikKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYXRhIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVByZXBhcmVkU3RhdGVtZW50CisJCXN0bXRQcmVwID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCAJID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsJCisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQluRXJyb3JzID0gMCwKKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiFcbiIsIGZ1bmMsIGxpbmUpOworCQkJCW5FcnJvcnMrKzsgCisJCQkJfQorCQkJfSAvLyB3aGlsZQorCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBHbGVtbSBsZW1tYXRhK2luZm9zIGZyb20gZmlsZSEgRXhpdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7IAorCQl9CQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gLTE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gbkVycm9yczsgLy8gMD1PSywgPjAgPSBuby4gb2YgZXJyb3JzLgorCX0gLy8gd3JpdGVEQkxlbW1hdGEKKworCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQ6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gcnVsZXMgaW50byBEZXJieSBEQi4KKwkgKiBOb3RlczoKKwkgKiAtIHRoaXMgaXMgdGhlIHZlcnNpb24gd2l0aCBhIFByZXBhcmVkUXVlcnkuCisJICogUGFyYW1ldGVyczoKKwkgKiBzcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTcuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoCisJCQlQcmVwYXJlZFN0YXRlbWVudCBzdG10LCAKKwkJCVN0cmluZyBsZW1tYSwgCisJCQlTdHJpbmcgd2YsIAorCQkJU3RyaW5nIGRlY29tcG9zaXRpb24sIAorCQkJYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCWJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorICAgIC8vIG5vdyBpbnNlcnQgbmV3IHZhbHVlcyBpbnRvIFByZXBhcmVkU3RhdGVtZW50OgorICAgIHRyeSB7CisgICAgCXN0bXQuc2V0U3RyaW5nKCAxLCBsZW1tYSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKCAyLCB3Zik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbigzLCBwcm9wMSk7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig0LCBwcm9wMik7CisgICAgICAgIHN0bXQuc2V0Qm9vbGVhbig1LCBzcGVjKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcmVwYXJlZCBzdG10ID0gJyVzJy5cbiIsICBmdW5jLCBzdG10LnRvU3RyaW5nKCkpOworICAgICAgICB9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlMSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKAkiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKyAgICAKKyAgICB0cnkgeworCQkvLyBleGVjdXRlIHRoZSBmaWxsZWQgcHJlcGFyZWQgc3RhdGVtZW50OgorCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorICAgIAorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHdyaXRlREJMZW1tYUluZm9zOgorCSAqIHdyaXRlIExlbW1hICsgV2YgKyBEZWNvbXBvc2l0aW9uIGludG8gRGVyYnkgREIuCisJICogUGFyYW1ldGVyczoKKwkgKiBjb250YWluc1NwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxMC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvcyhTdGF0ZW1lbnQgc3RtdCwgU3RyaW5nIGxlbW1hLCBTdHJpbmcgd2YsIFN0cmluZyBkZWNvbXBvc2l0aW9uLCBib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvcyI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJQm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIHNxbEluc2VydCA9IFN0cmluZy5mb3JtYXQoaW5zZXJ0UXVlcnksIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAgICAKKyAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbEluc2VydD0nJXMnLlxuIiwgZnVuYywgc3FsSW5zZXJ0KTsKKyAgICAKKwl0cnkgeworCQluID0gc3RtdC5leGVjdXRlVXBkYXRlKHNxbEluc2VydCk7CisgCQlpZiggbiAhPSAxICkKKwkgCQl7CisgCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKyAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9OworCQorCXJldHVybiAwOyAvLyBPSworCX0gLy8gd3JpdGVEQkxlbW1hSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWFEYXRhCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgZnJvbSB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dDogbGVtbWEgKyBHTEVNTV9PUFRTX3h4eCAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hRGF0YShMZW1tYUluZm8gbGVtbWFJbmZvLCBQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWFEYXRhIjsKKworCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWxlbW1hSW5mby5jb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCWxlbW1hSW5mby5zdG10ID0gbGVtbWFJbmZvLmNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJaW50IHIgPSByZWFkREJMZW1tYShsZW1tYUluZm8uc3RtdCwgbGVtbWFJbmZvKTsKKwkJCQorCQlpZiggciAhPSAwICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGdldCBkYXRhIGZvciBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyFcbiIsIAorCQkJCQlmdW5jLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGxlbW1hSW5mby5jb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYURhdGEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERCTGVtbWEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBieSBhY2Nlc3NpbmcgdGhlIEdsZW1tREIuCisJICogSW5wdXQgOiBsZW1tYSArIHByb3AxKzIgKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqIE91dHB1dDogCisJICogIC0gY29udGFpbnMgYSBSZXN1bHRTZXQgZm9yIGZldGNoaW5nIHRoZSB3b3JkZm9ybXMuCisJICogCSAgVGhpcyBSZXN1bHRTZXQgd2lsbCBoYXZlIGJlIGJlIGNsb3NlZCB3aXRoIExlbW1hSW5mby5jbG9zZSgpLgorCSAqIAkgIFRoZSBuby4gb2YgZm91bmQgd29yZGZvcm1zIGlzIG5vdCBrbm93biB0aWxsIHdlCisJICogCSAgZmV0Y2ggYWxsIG9mIHRoZW0gZnJvbSBSZXN1bHRTZXQhIAorCSAqIAktIGR1ZSB0byBTRUxFQ1QgRElTVElOQ1Qgb25seSB1bmlxIHdmIGFyZSByZXR1cm5lZC4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWEoU3RhdGVtZW50IHN0bXQsIExlbW1hSW5mbyBsZW1tYUluZm8pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYSI7CisJU3RyaW5nCisJCXNxbDsKKwkJCisJc3FsID0gU3RyaW5nLmZvcm1hdCgiU0VMRUNUIERJU1RJTkNUIHdmIGZyb20gJXMgV0hFUkUgbGVtbWE9JyVzJyAlcyAlcyAlcyIsIAorCQkJZGJUYWJsZSwKKwkJCWxlbW1hSW5mby5sZW1tYSwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIkFORCBwcm9wMT0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMSA/ICJBTkQgcHJvcDE9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIkFORCBwcm9wMj0nZmFsc2UnIiA6CisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMSA/ICJBTkQgcHJvcDI9J3RydWUnIiAgOiAiIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAxID8gIkFORCBzcGVjPSd0cnVlJyIgICA6IAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiQU5EIHNwZWM9J2ZhbHNlJyIgIDogIiIpOworCQorCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogcHJvcDE9JWQgcHJvcDI9JWQgc3BlYz0lZC5cbiIsIGZ1bmMsIGxlbW1hSW5mby5wcm9wMSwgbGVtbWFJbmZvLnByb3AyLCBsZW1tYUluZm8uc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWwgPSAnJXMnLlxuIiwgZnVuYywgc3FsKTsKKworCXRyeSB7CisJCWxlbW1hSW5mby5yZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOwkKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGVuIGV4ZWN1dGluZyBzcWw9JyVzJyFcbiIsIGZ1bmMsIHNxbCk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisJZmluYWxseSB7CisJCS8vIGFsbCBzcWwgc3R1ZmYgYXJlIGNsb3NlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24sIHNvIGRvbid0IGNsb3NlIHRoZW0gaGVyZSEKKwkJfQkKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zCisJICogUmV0dXJucyBHZW5lcmFsIEluZm9zIGFib3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKiAxNS4xMC4yMS9GQiByZWFkIEdsZW1tU2VydmljZXMucHJvcGVydGllcy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiSW5mb3MoUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAod2hlbiBsYXN0IHBhcmFtID0gdHJ1ZSk6CisJc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKHByb3BzKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCisJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWRiSW5mbyA9IHJlYWREYkxlbW1hdGFJbmZvcyhzdG10KTsKKwkJCQorCQlpZiggZGJJbmZvID09IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgcmVhZCBHZW5lcmFsIEluZm9zIGZyb20gR2xlbW0gRGF0YWJhc2UhXG4iLCBmdW5jKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJaWYoIGNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQl0cnkgeworCQkJaWYoIGNvbiAhPSBudWxsICkgY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgc3RtdC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQkJCisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBtYXkgYmUgbnVsbC4KKwkJCisJfSAvLyByZWFkRGJJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkxlbW1hdGFJbmZvczoKKwkgKiByZWFkcyBhbmQgcmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjb250ZW50IAorCSAqIG9mIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiBSZXR1cm5zIDA9T0sgb3IgZXJyb3IgY29kZSA+IDAuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJMZW1tYXRhSW5mb3MoU3RhdGVtZW50IHN0bXQpCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInJlYWREYkxlbW1hSW5mb3MiOworCVN0cmluZ1tdCisJCXNxbCA9IHsJIlNFTEVDVCBDT1VOVChkaXN0aW5jdCBsZW1tYSkgZnJvbSAiICsgZGJUYWJsZSAsCS8vIGNvdW50cyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YS4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUsCQkJCQkvLyBjb3VudHMgdG90YWwgbm8uIG9mIHN0b3JlZCB3b3JkZm9ybXMuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj10cnVlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj10cnVlIn07CisJUmVzdWx0U2V0CisJCXJlcyA9IG51bGw7IAorCWludFtdCisJCW5Db3VudHMgPSBuZXcgaW50W3NxbC5sZW5ndGhdOworCWludAkJCisJCWkgPSAwLCAKKwkJbkRpc3RMZW1tYXRhID0gLTEsCS8vIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhIGluIERCLgorCQluV2ZzCQkgPSAtMTsJLy8gbm8uIG9mIHdvcmRmb3JtcyBpbiBEQi4KKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogZXh0cmFjdGluZyBhZ3JlZ2F0ZWQgaW5mb3MgYWJvdXQgRGF0YWJhc2UgY29udGVudHMuLi5cbiIsIGZ1bmMpOworCQorCWRiSW5mbyA9IG5ldyBHbGVtbURCSW5mbygpOworCisJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJdHJ5IHsKKwkJZm9yKGk9MDsgaTxzcWwubGVuZ3RoOyBpKyspCisJCQl7CisJCQlyZXMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWxbaV0pOworCQkJaWYoIHJlcy5uZXh0KCkgKQorCQkJCWRiSW5mby5jb3VudHNbaV0gPSByZXMuZ2V0SW50KDEpOyAvLyBjb3VudCBpcyBpbiBjb2x1bW4gMS4KKwkJCWVsc2UKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZXh0cmFjdCBjb3VudCBmcm9tICclcychXG4iLCBmdW5jLCBzcWxbaV0pOworCQkJCWRiSW5mby5jb3VudHNbaV0gPSAtMTsKKwkJCQl9CisJCQl9CisgICAgICAgCisgICAgICAgIH0KKyAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAJeworICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHNxbD0nJXMnIGZhaWxlZCFcbiIsIGZ1bmMsIHNxbFtpXSk7CisgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgCX0KKwlmaW5hbGx5IHsKKwkJdHJ5IHsKKwkJCXJlcy5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gT0sKKwl9IC8vIHJlYWREYkxlbW1hdGFJbmZvcworCQorCS8qKioqKioqKioqKioqKioqKioqKiBUZXN0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvc190ZXN0CisJICogVGhpcyBpcyBkZWJ1ZyBjb2RlIHdyaXR0ZW4gdG8gdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBEZXJieQorCSAqIERhdGFiYXNlIGZyb20gYW4gZXh0ZXJuYWwgSmF2YSBQcm9ncmFtbS4KKwkgKiAwOC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgcmVhZERiSW5mb3NfdGVzdCgpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJU3RyaW5nCisJCWluc2VydFN0bXQgPSAiIjsKKwkKKwkvLyBDb25uZWN0IHRvIERlcmJ5IGRhdGFiYXNlOgorCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQkKKwkJLy8gZXh0cmFjdCBEQiBpbmZvcyBhbmQgcmV0dXJuIHRoZW06CisJCXRyeQorCQkJeworCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyAKKyAgICAgICAgICAgIAlzcWwgPSAiU0VMRUNUICogRlJPTSAiICsgZGJUYWJsZTsKKyAgICAgICAgICAgIFJlc3VsdFNldCAKKyAgICAgICAgICAgIAlyZXN1bHQgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOworIAorICAgICAgICAgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiB0YWJsZSAnJXMnOlxuIiwgIGZ1bmMsIGRiVGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0Lm5leHQoKSkgeworICAgICAgICAgICAgCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIiclcycgOiAnJXMnIDogJyVzJyA6ICclcycgLlxuIiwgcmVzdWx0LmdldFN0cmluZygxKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMiksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDMpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZyg0KSk7CisgICAgICAgIAkJaW5zZXJ0U3RtdCA9IGluc2VydFN0bXQgKyAiPHA+IiArIHJlc3VsdC5nZXRTdHJpbmcoMSkgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoMikgKyAiIDogIiArCisgICAgICAgICAgICAgICAgCQkgICAgIHJlc3VsdC5nZXRTdHJpbmcoMykgKyAiIDogIiArIHJlc3VsdC5nZXRTdHJpbmcoNCkgKyAiPC9wPiI7CisgICAgICAgICAgICAJfQorCQkJfQorCSAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIHNxbEV4Y2VwdCkKKyAgICAgICAgCXsKKwkgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogaW5zZXJ0U3RtdD0nJXMnIGZhaWxlZCEuXG4iLCBmdW5jLCBzdG10KTsKKyAgICAgICAgICAgIHNxbEV4Y2VwdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGluZyAnJXMgZmFpbGVkIVxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCXJldHVybiAxOworCQl9CisJCisJLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCXRyeSB7CisJCWNvbi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCisJcmV0dXJuIDA7IC8vIE9LCisJCQorCX0gLy8gcmVhZERiSW5mb3NfdGVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIGltcG9ydEdsZW1tTGVtYXRhX3Rlc3QKKwkgKiBUZXN0IFZlcnNpb24uCisJICogMTIuMTIuMTkvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0KFN0cmluZyBmbikKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QiOworCUlucHV0U3RyZWFtIAorCQlpbjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbjIgPSBudWxsOworCVN0cmluZworCQlsaW5lOworCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJcjsKKwkKKwkvKgorCSAqIFJlYWQgTGVtbWF0YSArIEluZm8gZnJvbSBmaWxlOiAKKwkgKi8KKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlYWRpbmcgZnJvbSAnJXMnLlxuIiwgZnVuYywgZm4pOworCQkKKwl0cnkgeworCQkvL2luID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oIG5ldyBGaWxlSW5wdXRTdHJlYW0oZm4pICk7CisJCWluMiA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJd2hpbGUoIChsaW5lID0gaW4yLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCA9PSAzICkKKwkJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogSW1wb3J0OiBsZW09JyVzJyBEZWNvbXA9JyVzJyBXZj0nJXMnLlxuIiwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMV0sIGxlbW1hSW5mb1syXSk7CisJCQllbHNlCisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6IGltcG9ydEdsZW1tTGFtYXRhOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzIVxuIiwgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQl9CisJCX0gCisJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBvcGVuICclcychXG4iLCBmdW5jLCBmbik7CisJCXJldHVybiAxOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAxOworCQl9CisKKwl0cnkgeworCQlpbjIuY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwkvKiBDaGVjayBjb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCSAqLyAKKwlyID0gcmVhZERiSW5mb3NfdGVzdCgpOworCWlmKCByICE9IDAgKQorCQlyZXR1cm4gcjsKKwkJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mNC9kMDg3NDg4NjQ5M2QwMDFjMTBiMWIxN2RkZDMwOWU2ZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjQvZDA4NzQ4ODY0OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjN2JiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjQvZDA4NzQ4ODY0OTNkMDAxYzEwYjFiMTdkZGQzMDllNmYKQEAgLTAsMCArMSw3MTIgQEAKK3BhY2thZ2UgZGUua29yYXAuc2VydmljZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyOworaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OworaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvKgorCSAqIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcworCSAqIAorCSAqIEFyZ3VtZW50czoKKwkgKiBwcm9wcwk6IFByb3BlcnRpZXMgbG9hZGVkIGJ5IHRoZSBHbGVtbVNlcnZpY2VzLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBmdW5jdGlvbiBsb2FkcyBvbmx5IHRob3NlIENvbnN0YW50cyBuZWVkZWQgaW4gdGhpcyBjbGFzcy4KKwkgKiAxNS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMJcHJvcHMpCisJCisJeworCWZuYW1lREIJCSAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsIAkiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvRGJzL0RlcmJ5VGVzdERCIik7CisJc2VydmVySG9zdAkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAic2VydmVySG9zdCIsCSIvL2xvY2FsaG9zdDoxNTI3LyIpOworCWRlcmJ5REJVUkwgCQk9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZm5hbWVEQjsKKwkJCQorCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAkJCQkJaW1wb3J0R2xlbW1MZW1hdGEKKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGZuCQkgOiBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgR0xFTU0gb3V0cHV0IFtJU084ODU5LTFdIGV4cGVjdGVkLCBub3QgVVRGLTghCisJICogcHJvcHMJIDogUHJvcGVydGllcyB2b20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIHRvIHNldCBjb25zdGFudHMgbmVlZGVkCisJICogCQkJICAgaW4gdGhpcyBjbGFzcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGEoU3RyaW5nIGZuLCBQcm9wZXJ0aWVzIHByb3BzLCBmaW5hbCBTdHJpbmcgZGJwYXRoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGEiOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluID0gbnVsbDsKKwlpbnQKKwkJbkVycm9yczsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisKKwkvLyBvcGVuIHJlYWRlciBvbiBHbGVtbSBMZW1tYXRhOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCWluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCQorCQluRXJyb3JzID0gd3JpdGVEQkxlbW1hdGEoaW4pOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgcmVhZGluZyBmcm9tICclcychXG4iLCBmdW5jLCBmbik7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLy8gY2xvc2UgUmVhZGVyOgorCXRyeSB7CisJCWluLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJbkVycm9ycyA9IC0xOworCQl9CisJCisgCWlmKCBuRXJyb3JzID09IDAgKQorIAkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQgZG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBmdW5jKTsKKyAJZWxzZQorIAkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRGVidWc6ICVzOiBJbXBvcnQ6ICVkIEVycm9ycyFcbiIsIGZ1bmMsIG5FcnJvcnMpOworIAkKKwlyZXR1cm4gbkVycm9yczsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YQorCQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiB3cml0ZURCTGVtbWF0YSgpCisJICogc3RvcmVzIGxpc3Qgb2YgbGVtbWF0YSArIGluZm9zIGludG8gRGVyYnkgZGIuCisJICogRmlsZSBmb3JtYXQ6ICJMZW1tYSBEZWNvbXBvc2l0aW9uIFdmIiwKKwkgKiAgICAgICAgICAgICAgZS5nLjogIkjvv711c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYXRhKEJ1ZmZlcmVkUmVhZGVyIGluKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hdGEiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJUHJlcGFyZWRTdGF0ZW1lbnQKKwkJc3RtdFByZXAgPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10IAkgPSBudWxsOworCVN0cmluZworCQlsaW5lOwkKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlyZXQgPSAwOyAvLyBPSy4KKwlib29sZWFuCisJCWNvbnRhaW5zU3BlYzsKKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisKKwkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQlzdG10UHJlcCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFByZXBhcmVkUXVlcnkpOworCQllbHNlCisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCisJCXdoaWxlKCAobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwgKQorCQkJeworCQkJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6IGltcG9ydDogJyVzJy5cbiIsIGxpbmUpOworCQkJbGVtbWFJbmZvID0gbGluZS5zcGxpdCgiXFxzIik7CisJCQlpZiggbGVtbWFJbmZvLmxlbmd0aCAhPSAzICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiAnJXMnIGhhcyAlZCBjb21wb25lbnRzISBFeHBlY3RlZCA9IDMhIENhbm5vdCBiZSBzdG9yZWQhXG4iLCBmdW5jLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCQluRXJyb3JzKys7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJCisJCQkvLyBHZXQgSW5mbywgaWYgd29yZGZvcm0gY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlICctJywgaW50ZXJwdW5jdGlvbiBldGMuOgorCQkJLy8gbGVtbWFJbmZvWzJdID0gd29yZGZvcm0uCisJCQljb250YWluc1NwZWMgPSBMZW1tYUluZm8uaXNXZlNwZWNpYWxDYXNlKGxlbW1hSW5mb1syXSk7CisJCQkvLyBzdG9yZSBpbnRvIERCOgorCQkJaWYoIHVzZVByZXBhcmVkU3RtdCApCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3NfcHJlcGFyZWQoc3RtdFByZXAsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gd3JpdGVEQkxlbW1hSW5mb3Moc3RtdCwgbGVtbWFJbmZvWzBdLCBsZW1tYUluZm9bMl0sIGxlbW1hSW5mb1sxXSwgY29udGFpbnNTcGVjKTsKKwkJCQorCQkJaWYoIHJldCAhPSAwICkKKwkJCQl7CisJCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgc3RvcmUgbGVtbWEgJyVzJyBpbnRvIERCIVxuIiwgZnVuYywgbGluZSk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSAKKwkJCQljb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSAKKwkJCQlzdG10LmNsb3NlKCk7CisJCQlpZiggc3RtdFByZXAgIT0gbnVsbCApIAorCQkJCXN0bXRQcmVwLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXByaXZhdGUgc3RhdGljIGludCB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCgKKwkJCVByZXBhcmVkU3RhdGVtZW50IHN0bXQsIAorCQkJU3RyaW5nIGxlbW1hLCAKKwkJCVN0cmluZyB3ZiwgCisJCQlTdHJpbmcgZGVjb21wb3NpdGlvbiwgCisJCQlib29sZWFuIHNwZWMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZCI7CisJU3RyaW5nCisJCXNxbEluc2VydCA9IG51bGw7CisJYm9vbGVhbgorCQlwcm9wMSwgcHJvcDI7CisJaW50CisJCW47CisJCisJcHJvcDEgICAgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMCkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworCXByb3AyIAkgID0gZGVjb21wb3NpdGlvbi5jaGFyQXQoMSkgPT0gJysnID8gdHJ1ZSA6IGZhbHNlOworICAgIAorCS8vIGZvciBsb2dpbmcgb25seToKKwlzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JyViJyBwcm9wMj0nJWInIHNwZWM9JyViJyFcbiIsICAKKwkJCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisgICAgCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZAorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogd3JpdGVEQkxlbW1hSW5mb3M6CisJICogd3JpdGUgTGVtbWEgKyBXZiArIERlY29tcG9zaXRpb24gaW50byBEZXJieSBEQi4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIGNvbnRhaW5zU3BlYyA6IGlmIHRydWU6IGxlbW1hIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSBoeXBoZW4gZXRjLgorCSAqIHJldHVybnMgMCA9IE9LLgorCSAqIDEwLjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zKFN0YXRlbWVudCBzdG10LCBTdHJpbmcgbGVtbWEsIFN0cmluZyB3ZiwgU3RyaW5nIGRlY29tcG9zaXRpb24sIGJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zIjsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlCb29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwlwcm9wMSAgICAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgwKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisJcHJvcDIgCSAgPSBkZWNvbXBvc2l0aW9uLmNoYXJBdCgxKSA9PSAnKycgPyB0cnVlIDogZmFsc2U7CisgICAgc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworICAgIAorICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsSW5zZXJ0PSclcycuXG4iLCBmdW5jLCBzcWxJbnNlcnQpOworICAgIAorCXRyeSB7CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoc3FsSW5zZXJ0KTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorIAkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiFcbiIsIAorCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX07CisJCisJcmV0dXJuIDA7IC8vIE9LCisJfSAvLyB3cml0ZURCTGVtbWFJbmZvcworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYURhdGEKKwkgKiAKKwkgKiBSZWFkcyB3b3JkZm9ybXMgZm9yIG9uZSBsZW1tYSBmcm9tIHRoZSBHbGVtbURCLgorCSAqIElucHV0OiBsZW1tYSArIEdMRU1NX09QVFNfeHh4IChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiAgCisJICogMTQuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCQorCXN0YXRpYyBpbnQgcmVhZERCTGVtbWFEYXRhKExlbW1hSW5mbyBsZW1tYUluZm8sIFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkREJMZW1tYURhdGEiOworCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJbGVtbWFJbmZvLmNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJbGVtbWFJbmZvLnN0bXQgPSBsZW1tYUluZm8uY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlpbnQgciA9IHJlYWREQkxlbW1hKGxlbW1hSW5mby5zdG10LCBsZW1tYUluZm8pOworCQkJCisJCWlmKCByICE9IDAgKQorCQkJeworCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgZ2V0IGRhdGEgZm9yIGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIVxuIiwgCisJCQkJCWZ1bmMsIGxlbW1hSW5mby5sZW1tYSwgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwkJCXJldHVybiAxOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggbGVtbWFJbmZvLmNvbiA9PSBudWxsICkKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29ubmVjdGlvbiBmYWlsZWQhXG4iLCBmdW5jKTsKKwkJZWxzZQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3QgY3JlYXRlIHN0bXQhXG4iLCBmdW5jKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIHJlYWREQkxlbW1hRGF0YQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkREJMZW1tYQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGJ5IGFjY2Vzc2luZyB0aGUgR2xlbW1EQi4KKwkgKiBJbnB1dCA6IGxlbW1hICsgcHJvcDErMiAobGVtbWF0aXphdGlvbiBydWxlcykuCisJICogT3V0cHV0OiAKKwkgKiAgLSBjb250YWlucyBhIFJlc3VsdFNldCBmb3IgZmV0Y2hpbmcgdGhlIHdvcmRmb3Jtcy4KKwkgKiAJICBUaGlzIFJlc3VsdFNldCB3aWxsIGhhdmUgYmUgYmUgY2xvc2VkIHdpdGggTGVtbWFJbmZvLmNsb3NlKCkuCisJICogCSAgVGhlIG5vLiBvZiBmb3VuZCB3b3JkZm9ybXMgaXMgbm90IGtub3duIHRpbGwgd2UKKwkgKiAJICBmZXRjaCBhbGwgb2YgdGhlbSBmcm9tIFJlc3VsdFNldCEgCisJICogCS0gZHVlIHRvIFNFTEVDVCBESVNUSU5DVCBvbmx5IHVuaXEgd2YgYXJlIHJldHVybmVkLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYShTdGF0ZW1lbnQgc3RtdCwgTGVtbWFJbmZvIGxlbW1hSW5mbykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hIjsKKwlTdHJpbmcKKwkJc3FsOworCQkKKwlzcWwgPSBTdHJpbmcuZm9ybWF0KCJTRUxFQ1QgRElTVElOQ1Qgd2YgZnJvbSAlcyBXSEVSRSBsZW1tYT0nJXMnICVzICVzICVzIiwgCisJCQlkYlRhYmxlLAorCQkJbGVtbWFJbmZvLmxlbW1hLAorCQkJbGVtbWFJbmZvLnByb3AxID09IDAgPyAiQU5EIHByb3AxPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAxID8gIkFORCBwcm9wMT0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnByb3AyID09IDAgPyAiQU5EIHByb3AyPSdmYWxzZSciIDoKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAxID8gIkFORCBwcm9wMj0ndHJ1ZSciICA6ICIiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiQU5EIHNwZWM9J3RydWUnIiAgIDogCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMCA/ICJBTkQgc3BlYz0nZmFsc2UnIiAgOiAiIik7CisJCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgZnVuYywgbGVtbWFJbmZvLnByb3AxLCBsZW1tYUluZm8ucHJvcDIsIGxlbW1hSW5mby5zcGVjKTsKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHNxbCA9ICclcycuXG4iLCBmdW5jLCBzcWwpOworCisJdHJ5IHsKKwkJbGVtbWFJbmZvLnJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoZW4gZXhlY3V0aW5nIHNxbD0nJXMnIVxuIiwgZnVuYywgc3FsKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKwlmaW5hbGx5IHsKKwkJLy8gYWxsIHNxbCBzdHVmZiBhcmUgY2xvc2VkIG91dHNpZGUgdGhpcyBmdW5jdGlvbiwgc28gZG9uJ3QgY2xvc2UgdGhlbSBoZXJlIQorCQl9CQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWEKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3MKKwkgKiBSZXR1cm5zIEdlbmVyYWwgSW5mb3MgYWJvdXQgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBHbGVtbSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqIDE1LjEwLjIxL0ZCIHJlYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBHbGVtbURCSW5mbyByZWFkRGJJbmZvcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkKKwkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKwkKKwkJZGJJbmZvID0gcmVhZERiTGVtbWF0YUluZm9zKHN0bXQpOworCQkJCisJCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCByZWFkIEdlbmVyYWwgSW5mb3MgZnJvbSBHbGVtbSBEYXRhYmFzZSFcbiIsIGZ1bmMpOworCQkJfQorCQl9IAorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQlpZiggY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJCXRyeSB7CisJCQlpZiggY29uICE9IG51bGwgKSBjb24uY2xvc2UoKTsKKwkJCWlmKCBzdG10ICE9IG51bGwgKSBzdG10LmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CQkKKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIG1heSBiZSBudWxsLgorCQkKKwl9IC8vIHJlYWREYkluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiTGVtbWF0YUluZm9zOgorCSAqIHJlYWRzIGFuZCByZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGNvbnRlbnQgCisJICogb2YgdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIFJldHVybnMgMD1PSyBvciBlcnJvciBjb2RlID4gMC4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkxlbW1hdGFJbmZvcyhTdGF0ZW1lbnQgc3RtdCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAicmVhZERiTGVtbWFJbmZvcyI7CisJU3RyaW5nW10KKwkJc3FsID0gewkiU0VMRUNUIENPVU5UKGRpc3RpbmN0IGxlbW1hKSBmcm9tICIgKyBkYlRhYmxlICwJLy8gY291bnRzIG5vLiBvZiBkaXN0aW5jdCBsZW1tYXRhLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSwJCQkJCS8vIGNvdW50cyB0b3RhbCBuby4gb2Ygc3RvcmVkIHdvcmRmb3Jtcy4KKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPWZhbHNlIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9ZmFsc2UiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPXRydWUiLAorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9dHJ1ZSAgYW5kIHByb3AyPXRydWUifTsKKwlSZXN1bHRTZXQKKwkJcmVzID0gbnVsbDsgCisJaW50W10KKwkJbkNvdW50cyA9IG5ldyBpbnRbc3FsLmxlbmd0aF07CisJaW50CQkKKwkJaSA9IDAsIAorCQluRGlzdExlbW1hdGEgPSAtMSwJLy8gbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEgaW4gREIuCisJCW5XZnMJCSA9IC0xOwkvLyBuby4gb2Ygd29yZGZvcm1zIGluIERCLgorCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBleHRyYWN0aW5nIGFncmVnYXRlZCBpbmZvcyBhYm91dCBEYXRhYmFzZSBjb250ZW50cy4uLlxuIiwgZnVuYyk7CisJCisJZGJJbmZvID0gbmV3IEdsZW1tREJJbmZvKCk7CisKKwkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwl0cnkgeworCQlmb3IoaT0wOyBpPHNxbC5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCXJlcyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbFtpXSk7CisJCQlpZiggcmVzLm5leHQoKSApCisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IHJlcy5nZXRJbnQoMSk7IC8vIGNvdW50IGlzIGluIGNvbHVtbiAxLgorCQkJZWxzZQorCQkJCXsKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBleHRyYWN0IGNvdW50IGZyb20gJyVzJyFcbiIsIGZ1bmMsIHNxbFtpXSk7CisJCQkJZGJJbmZvLmNvdW50c1tpXSA9IC0xOworCQkJCX0KKwkJCX0KKyAgICAgICAKKyAgICAgICAgfQorICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgIAl7CisgICAgCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogc3FsPSclcycgZmFpbGVkIVxuIiwgZnVuYywgc3FsW2ldKTsKKyAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAJfQorCWZpbmFsbHkgeworCQl0cnkgeworCQkJcmVzLmNsb3NlKCk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkKKwlyZXR1cm4gZGJJbmZvOyAvLyBPSworCX0gLy8gcmVhZERiTGVtbWF0YUluZm9zCisJCisJLyoqKioqKioqKioqKioqKioqKioqIFRlc3QgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCisJLyogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREYkluZm9zX3Rlc3QKKwkgKiBUaGlzIGlzIGRlYnVnIGNvZGUgd3JpdHRlbiB0byB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIERlcmJ5CisJICogRGF0YWJhc2UgZnJvbSBhbiBleHRlcm5hbCBKYXZhIFByb2dyYW1tLgorCSAqIDA4LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCByZWFkRGJJbmZvc190ZXN0KCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREYkluZm9zIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCVN0YXRlbWVudAorCQlzdG10ID0gbnVsbDsKKwlTdHJpbmcKKwkJaW5zZXJ0U3RtdCA9ICIiOworCQorCS8vIENvbm5lY3QgdG8gRGVyYnkgZGF0YWJhc2U6CisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQorCS8vIG9wZW4gQ29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwl0cnkgeworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCQorCQkvLyBleHRyYWN0IERCIGluZm9zIGFuZCByZXR1cm4gdGhlbToKKwkJdHJ5CisJCQl7CisJCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIAorICAgICAgICAgICAgCXNxbCA9ICJTRUxFQ1QgKiBGUk9NICIgKyBkYlRhYmxlOworICAgICAgICAgICAgUmVzdWx0U2V0IAorICAgICAgICAgICAgCXJlc3VsdCA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7CisgCisgICAgICAgICAgICBHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHRhYmxlICclcyc6XG4iLCAgZnVuYywgZGJUYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQubmV4dCgpKSB7CisgICAgICAgICAgICAJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiJyVzJyA6ICclcycgOiAnJXMnIDogJyVzJyAuXG4iLCByZXN1bHQuZ2V0U3RyaW5nKDEpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygyKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoMyksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDQpKTsKKyAgICAgICAgCQlpbnNlcnRTdG10ID0gaW5zZXJ0U3RtdCArICI8cD4iICsgcmVzdWx0LmdldFN0cmluZygxKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZygyKSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAJCSAgICAgcmVzdWx0LmdldFN0cmluZygzKSArICIgOiAiICsgcmVzdWx0LmdldFN0cmluZyg0KSArICI8L3A+IjsKKyAgICAgICAgICAgIAl9CisJCQl9CisJICAgIGNhdGNoIChTUUxFeGNlcHRpb24gc3FsRXhjZXB0KQorICAgICAgICAJeworCSAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBpbnNlcnRTdG10PSclcycgZmFpbGVkIS5cbiIsIGZ1bmMsIHN0bXQpOworICAgICAgICAgICAgc3FsRXhjZXB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCX0KKwkJfQorCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW5nICclcyBmYWlsZWQhXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJcmV0dXJuIDE7CisJCX0KKwkKKwkvLyBjbG9zaW5nIGNvbm5lY3Rpb246CisJdHJ5IHsKKwkJY29uLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwkJCisJfSAvLyByZWFkRGJJbmZvc190ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogaW1wb3J0R2xlbW1MZW1hdGFfdGVzdAorCSAqIFRlc3QgVmVyc2lvbi4KKwkgKiAxMi4xMi4xOS9GQgorCSAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QoU3RyaW5nIGZuKQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdCI7CisJSW5wdXRTdHJlYW0gCisJCWluOworCUJ1ZmZlcmVkUmVhZGVyCisJCWluMiA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CisJU3RyaW5nW10KKwkJbGVtbWFJbmZvOworCWludAorCQlyOworCQorCS8qCisJICogUmVhZCBMZW1tYXRhICsgSW5mbyBmcm9tIGZpbGU6IAorCSAqLworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogcmVhZGluZyBmcm9tICclcycuXG4iLCBmdW5jLCBmbik7CisJCQorCXRyeSB7CisJCS8vaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggbmV3IEZpbGVJbnB1dFN0cmVhbShmbikgKTsKKwkJaW4yID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmbikpOworCQl3aGlsZSggKGxpbmUgPSBpbjIucmVhZExpbmUoKSkgIT0gbnVsbCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogaW1wb3J0OiAnJXMnLlxuIiwgbGluZSk7CisJCQlsZW1tYUluZm8gPSBsaW5lLnNwbGl0KCJcXHMiKTsKKwkJCWlmKCBsZW1tYUluZm8ubGVuZ3RoID09IDMgKQorCQkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBJbXBvcnQ6IGxlbT0nJXMnIERlY29tcD0nJXMnIFdmPSclcycuXG4iLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1sxXSwgbGVtbWFJbmZvWzJdKTsKKwkJCWVsc2UKKwkJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogaW1wb3J0R2xlbW1MYW1hdGE6ICclcycgaGFzICVkIGNvbXBvbmVudHMhXG4iLCBsaW5lLCBsZW1tYUluZm8ubGVuZ3RoKTsKKwkJCX0KKwkJfSAKKwljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIAorCQl7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IG9wZW4gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJcmV0dXJuIDE7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIDE7CisJCX0KKworCXRyeSB7CisJCWluMi5jbG9zZSgpOworCQl9IAorCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCS8qIENoZWNrIGNvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2U6CisJICovIAorCXIgPSByZWFkRGJJbmZvc190ZXN0KCk7CisJaWYoIHIgIT0gMCApCisJCXJldHVybiByOworCQkKKwlyZXR1cm4gMDsgLy8gT0sKKwkKKwl9IC8vIGltcG9ydEdsZW1tTGVtbWF0YV90ZXN0CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y3L2UwMzA0ZDI5NTIzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mNy9lMDMwNGQyOTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4NzkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mNy9lMDMwNGQyOTUyM2QwMDFjMTBiMWIxN2RkZDMwOWU2ZgpAQCAtMCwwICsxLDk4MCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC53cy5ycy5Db25zdW1lczsKK2ltcG9ydCBqYXZheC53cy5ycy5EZWZhdWx0VmFsdWU7CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuUXVlcnlQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworaW1wb3J0IGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzOworCisvKiAwLjEgOiAxNy4wNi4yMC9GQiAKKyAqIDAuMiA6IDI1LjEwLjIxL0ZCCisgKiAgICAgICBsb2dpbmcgb2YgdGhlIEFQSSBSZXF1ZXN0cy4KKyAqICAgICAgIGxvYWRpbmcgY29uc3RhbnRzIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLgorICogICAgICAgY29ycmVjdGluZyBjYWxsaW5nIG9mIGxlbW1hICsgcHJvcDEvcHJvcDIvc3BlYy4KKyAqICAgICAgIGhhbmRsaW5nIG9mIGxlbW1hdGEgd2l0aCAnw58nLgorICogCisgKiBHZW5lcmFsIGNvbW1lbnRzIHRvIHRoZSBlbmNvZGluZyBvZiBkZXJpdmF0aW9ucyBmcm9tIGxlbW1hIHRvIHdmcyBhbmQgaG93IHRoZXkgYXJlIGVuY29kZWQKKyAqIGluIHRoZSBEZXJieSBkYXRhYmFzZToKKyAqIAorICogR0xFTU0gZW5jb2Rpbmc6ICAKKyAqICAgXyBfIDogK0ZsZXggICAgICAgw5ZsZSAtPiDDlmwgICAgICAKKyAqICAgKyBfIDogK0NvbXAgICAgICAgw5ZsbGFtcGUgLT4gw5ZsIG9yIExhbXBlIChjb21wb3VuZCkuCisgKiAgIF8gKyA6ICtvdGhlciAgICAgIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuc2NodWggKG5vIGNvbXBvdW5kIGZvciAnVHVybnNjaHVoJywgb25seSBwcmVmaXgpLgorICogICArICsgOiArQ29tcCtvdGhlciBBbnRpdHVybnNjaHVoIC0+IEFudGktICsgVHVybiArIFNjaHVoIChjb21wb3VuZCBmb3IgJ1NjaHVoJyArIFByZWZpeCkuCisgKiBDMiBsZW1tYXRpemF0aW9uIG9wdGlvbnM6CisgKiAgIEZsZXggIChpZGVudGljYWwgdG8gR2xlbW0pCisgKiAgIENvbXAgIChpZGVudGljYWwgdG8gR2xlbW0sIGluY2x1ZGVzIGFsbCBGbGV4aW9ucykKKyAqICAgT3RoZXIgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKS4KKyAqICAgU3BlYyAgKG9ubHkgQzI6IGluY2x1ZGVzIGFsbCB3ZnMgd2l0aCBoaXBoZW4gYW5kL29yIHNvbWUgbm9uLWFscGhhYmV0aWMgSVNPODg1OS0xIGNoYXJzKQorICogICAgICAgICBFLmcuIMOWbC1FeHBvcnRlLCAiTWFya2VuIi3DlmxlLgorICogRGVyYnkgRW5jb2Rpbmc6CisgKiAgcHJvcDEgCXByb3AyCXNwZWMgICAJbWVhbmluZyBpbiBDMjoKKyAqICAwCQkwCQktCQlGbGV4CisgKiAgMQkJMAkJLQkJQ29tcAorICogIDAJCTEJCS0JCU90aGVyIChwcmVmaXgpCisgKiAgMQkJMQkJLQkJQ29tcCArIE90aGVyCisgKiAgLQkJLQkJMAkJLVNwZWMKKyAqICAtCQktCQkxCQkrU3BlYworICogCisgKiBFeGFtcGxlczoKKyAqICZTY2h1aAkJCTogU2NodWgsIFNjaHVoZSwgLi4uIG9ubHkgZmxleGlvbnMKKyAqICZTY2h1aCtjb21wCQk6IFNjaHVoZSwgVHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzLgorICogJlNjaHVoK290aGVyCQk6IFNjaHVoZSwgQW50aXNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgcHJlZml4ZWQgd2ZzIChubyBjb21wb3VuZHMpLgorICogJlNjaHVoK2NvbXArb3RoZXI6IFNjaHVoZSwgQW50aXNjaHVoZSwgVHVybnNjaHVoZSwgQW50aXR1cm5zY2h1aGUuLi4gZmxleGlvbnMgYW5kIGNvbXBvdW5kcyBhbmQgCisgKiAJCQkJCSAgcHJlZml4ZWQgc2luZ2xlIHdmcyAoQW50aXNjaHVoZSkgYW5kIHByZWZpeGVkIGNvbXBvdW5kcy4KKyAqICZTY2h1aCtzcGVjCQk6ICJBbnRpIi1TY2h1aGUsIDY4Z2VyLVNjaHVoZS4uLiBtYXkgYmUgY29tYmluZWQgd2l0aCBldmVyeSBvcHRpb25zOiBhZGRzCisgKiAgICAgICAgICAgICAgICAgICAgd2ZzIHdpdGggaHlwaGVuIGFuZC9vciBub24tYWxwaGFiZXRpYyBjaGFycy4KKyAqIAorICogQ29udmVyc2lvbiBydWxlczoKKyAqIAorICogICZzY2hsaWXDn2VuIC0+IGludGVybmFsIHNlYXJjaCBmb3IgJ3NjaGxpZXNzZW4nLAorICogIGJlY2F1c2UgR2xlbW0gb3V0cHV0cyAnc3MnIGZvciAnw58nLgorICogIAorICogQ2hhcmFjdGVyIEVuY29kaW5nOgorICogCisgKiAtIFdoZW4gaW1wb3J0aW5nIHdmcyB0byB0aGUgRGVyYnkgRGF0YWJhc2Ugd2l0aCBkb0N1cmxHbGVtbVNlcnZpY2VzL2luZGV4TGVtbWF0YToKKyAqIAorICogICBJTlBVVDogd29yZGZvcm0gbGlzdCBpbiBbVVRGLThdIDogVVRGLTggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gTGF0MSBmb3IgR2xlbW0sCisgKiAgICAgICAgICB0aGUgb3V0cHV0IG9mIEdsZW1tIFtMYXQxXSBpcyByZXR1cm5lZCB0byB0aGUgR2xlbW1TZXJ2aWNlcyB3aXRob3V0IHJlY29udmVyc2lvbgorICogICAgICAgICAgdG8gVVRGOCBhbmQgaW1wb3J0ZWQgaW50byBEZXJieSBEYXRhYmFzZSB1bmNoYW5nZWQuCisgKgkJCisgKi8KKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNC4xMS4yMSI7IAorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb24JCT0gIjAuMiI7CisJCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgZm5hbWVQcm9wcwkJPSAiL1dFQi1JTkYvR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzIjsKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVhZCBmcm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyAodGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyk6CisJcHJpdmF0ZSBTdHJpbmcgR1NfV29ya2luZ1BhdGggCQk9ICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVXZnMgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvZ2xfd2ZzX2luLnR4dCI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVPdXQgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCXByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL0dsZW1tU2VydmljZXMuZXJyIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVNjcmlwdCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQkJCT0gR1NfV29ya2luZ1BhdGggKyAiL3RtcC9sZW0zLnV0ZjgiOworCisJQENvbnRleHQKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3Q7CisJQENvbnRleHQKKwlwcml2YXRlIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCXB1YmxpYyBzdGF0aWMgUHJpbnRTdHJlYW0gZm91dAk9IG51bGw7CisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmZXJyCT0gbnVsbDsJCQorCQkKKwkvKiAKKyAJICogCisJICogLSBhZnRlciBsb2FkUHJvcGVydGllcywgc2V0cyB0aGUgY2xhc3MgdmFyaWFibGUgd2l0aCBsb2FkZWQgcHJvcGVydHkgdmFsdWVzLgorCSAqIAorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIHNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlHU19Xb3JraW5nUGF0aCAJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiR1NfV29ya2luZ1BhdGgiLCAiL2hvbWUvYm9kbWVyL0tvckFQL0dsZW1tU2VydmljZXMvVGVzdHMiKTsKKwlmbmFtZVdmcwkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVXZnMiLCAJICAgImdsX3dmc19pbi50eHQiKTsKKwlmbmFtZVdmcwkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lV2ZzOworCWZuYW1lT3V0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZU91dCIsIAkgICAiR2xlbW1TZXJ2aWNlcy5sb2ciKTsKKwlmbmFtZU91dAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lT3V0OworCWZuYW1lRXJyCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUVyciIsIAkgICAiR2xlbW1TZXJ2aWNlcy5lcnIiKTsKKwlmbmFtZUVycgkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lRXJyOworCWZuYW1lU2NyaXB0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVNjcmlwdCIsCSAgICJkb0dsZW1tIik7CisJZm5hbWVTY3JpcHQJCT0gR1NfV29ya2luZ1BhdGggKyAiLyIgKyBmbmFtZVNjcmlwdDsKKwlmbmFtZUxlbWF0YQkJPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVMZW1hdGEiLCAgICAidG1wL2xlbTMiKTsKKwlmbmFtZUxlbWF0YQkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lTGVtYXRhOworCX0gLy8gc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJCisJLyoKKwkgKiAgbG9nX1JlcXVlc3Q6CisJICogIAorCSAqICAtIHdyaXRlIGluZm8gYWJvdXQgQVBJIFJlcXVlc3QuCisJICogIFBhcmFtZXRlcnM6CisJICogIHJlcXVlc3RQYXRoCTogcGF0aCBvZiB3ZWJhcHAgYWRkcmVzc2VkIGJ5IHRoZSByZXF1ZXN0LgorCSAqICBmdW5jCQk6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIGltcGxlbWVudHMgdGhlIHJlcXVlc3QuCisJICogIAorCSAqICAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBsb2dfUmVxdWVzdChTdHJpbmcgcmVxdWVzdFBhdGgsIFN0cmluZyBmdW5jKQorCQorCXsKKwkvLyB0cmFuc2Zvcm0gImRhdGVUdGltZSIgLT4gImRhdGUgdGltZSI6CisJCisJZm91dC5wcmludGYoIiMjI1xuIik7CisJZm91dC5wcmludGYoIiMjIyAlczogJXMgOiB2ZXJzPSclcycsIHZkYXRlPSclcycgcmVxdWVzdD0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdFBhdGgsIHZlcnNpb24sIHZlcnNpb25EYXRlLCAKKwkJCQkJCUxvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikpOworCWZvdXQucHJpbnRmKCIjIyNcbiIpOworCX0gLy8gbG9nX1JlcXVlc3QKKwkJCisJLyogZm9ybWF0RGJOYW1lCisJICogCisJICogLSBnZXRzIG5hbWUgb2YgRGF0YWJhc2UgdXNlZCBieSBEZXJieSBmcm9tIHByb3BzIAorCSAqICAgYW5kIGZvcm1hdCBpdCB0byBIVE1MLgorCSAqICAKKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgU3RyaW5nIGZvcm1hdERiTmFtZShQcm9wZXJ0aWVzIHByb3BzKQorCQorCXsKKwlTdHJpbmcKKwkJZGJOYW1lOworCVN0cmluZworCQlkYlBhdGggPSBVdGlscy5nZXRDb25zdGFudEZyb21Qcm9wZXJ0aWVzKHByb3BzLCAiZm5hbWVEQiIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlpbnQKKwkJaiA9IGRiUGF0aC5sYXN0SW5kZXhPZignLycpOworCQorCWlmKCBqID4gMCApCisJCWRiTmFtZSA9IGRiUGF0aC5zdWJzdHJpbmcoaisxKTsKKwllbHNlCisJCWRiTmFtZSA9IGRiUGF0aDsKKwkKKwlyZXR1cm4gZGJOYW1lOyAvLyAiPHA+PGI+RGF0YWJhc2U6ICIgKyBkYk5hbWUgKyAiPC9iPjwvcD5cbiI7CisJfSAvLyBmb3JtYXREYk5hbWUKKworCS8qCisJICogY2xvc2VMb2dTdHJlYW1zOgorCSAqIAorCSAqIC0gY2xvc2UgdGhlIGZvdXQvZmVyciBsb2cgc3RyZWFtcy4KKwkgKiAKKwkgKiAyNi4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgdm9pZCBjbG9zZUxvZ1N0cmVhbXMoKQorCQorCXsKKwlpZiggZm91dCAhPSBudWxsKQorCQlmb3V0LmNsb3NlKCk7CisJZm91dCA9IG51bGw7CisJCisJaWYoIGZlcnIgIT0gbnVsbCApCisJCWZlcnIuY2xvc2UoKTsKKwlmZXJyID0gbnVsbDsKKwl9IC8vIGNsb3NlTG9nU3RyZWFtcworCQorCS8qIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisJICogCisJICogLSBsb2FkIEdsZW1tU2VydmljZXMucHJvcGVydGllcywgc2V0cyBHbGVtbVNlcnZpY2VzIGNvbnN0YW50cworCSAqICAgYW5kIGxvZ3MgdGhlIHJlcXVlc3QuCisJICogLSBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCBjb25zdGFudHMgYmVmb3JlIGxvZ2dpbmcgYW55dGhpbmcsIGJlY2F1c2UKKwkgKiAgIGxvZ2dpbmcgd2lsbCBiZSBkb25lIGludG8gdGhlIGxhc3Qgc3Rkb3V0L3N0ZGVyciBvcGVuZWQgaW4gZ2xhc3NmaXNoJ3MgSlZNLAorCSAqICAgZS5nLiBpbiB0aGUgbG9nIG9mIGFub3RoZXIgU2VydmljZS4KKwkgKiAxOS4xMC4yMS9GQgorCSAqLworCQorCXByaXZhdGUgUHJvcGVydGllcyBpbml0X2FuZF9sb2dfUmVxdWVzdChTdHJpbmcgZnVuYywgU3RyaW5nIHJlcXVlc3RQYXRoKQorCQorCXsKKwlTdHJpbmcKKwkJcmVhbFBhdGggPSBzZXJ2bGV0Q29udGV4dC5nZXRSZWFsUGF0aChmbmFtZVByb3BzKTsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKGlmIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlQcm9wZXJ0aWVzCisJCXByb3BzID0gVXRpbHMubG9hZFByb3BlcnRpZXMoc2VydmxldENvbnRleHQuZ2V0UmVzb3VyY2VBc1N0cmVhbShmbmFtZVByb3BzKSwgZm5hbWVQcm9wcywgcmVhbFBhdGgsIGZhbHNlKTsKKwkKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIG9wZW4gZm91dCBhbmQgZmVyciBhcyByZXBsYWNlbWVudCBmb3Igc3Rkb3V0L3N0ZGVyciBmb3IgdXNlIGluIEdsZW1tU2VydmljZXMuCisJLy8gZG8gbm90IHVzZSBvciByZWRpcmVjdCBTeXN0ZW0ub3V0IGFuZCBTeXN0ZW0uZXJyLCBhcyB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZAorCS8vIGJ5IG90aGVyIFNlcnZpY2VzIGluIHRoZSBzYW1lIGdsYXNzZmlzaCBKVk0sIGUuZy4gYnkgdGhlIFdmb3JtU2VydmljZXMuCisJZm91dCA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZU91dCk7CisJZmVyciA9IFV0aWxzLnNldExvZ1N0cmVhbShmbmFtZUVycik7CisJCisJLy9VdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCQorCWxvZ19SZXF1ZXN0KHJlcXVlc3RQYXRoLCBmdW5jKTsKKwkKKwlyZXR1cm4gcHJvcHM7CisJfSAvLyBpbml0X2FuZF9sb2dfUmVxdWVzdAorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorCSAqIAorCSAqIGRvR0VUX3N0YXR1cygpIG9uIC9pbmRleC9zdGF0dXMuCisJICogCisJICogR0VUIHN0YXR1cyBvZiBHbGVtbSBTZXJ2aWNlcworCSAqIAorCSAqIDE3LjA2LjIwL0ZCCisJICogCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisJICovCisJCisJQFBhdGgoInN0YXR1cyIpCisJQEdFVAorCUBQcm9kdWNlcygidGV4dC9odG1sIikKKwkKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3N0YXR1cygpIAorCQorCXsKKwlmaW5hbCBTdHJpbmcgZnVuYyA9ICJkb0dFVF9zdGF0dXMiOworCVN0cmluZworCQlzdGF0dXM7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvc3RhdHVzLyIpOworCQorCS8vIGh0dHBTZXJ2bGV0UmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbnYpOworCQorCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJICAgCSIgPGgzPkdsZW1tIFNlcnZpY2VzPC9oMz5cbiIgKworCQkJCQkJICAgCSIgPHA+PGI+VmVyc2lvbjwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnN0YXR1czwvYj4gIDogcmVhZHkuPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+UmVxdWVzdCB0aW1lPC9iPjogJXM8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5wcm9wZXJ0aWVzPC9iPjogJXMgPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+ZGF0YWJhc2U8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCXZlcnNpb24sCisJCQkJCQkJdmVyc2lvbkRhdGUsCisJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSwKKwkJCQkJCQlzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpID09IG51bGwgPyAibm90IGZvdW5kIiA6CisJCQkJCQkJCXByb3BzLmlzRW1wdHkoKSA/ICJlbXB0eSIgOiAibG9hZGVkIiwKKwkJCQkJCQlmb3JtYXREYk5hbWUocHJvcHMpCisJCQkJCQkJKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGRvbmUuXG4iLCBmdW5jKTsKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIAorCSAqIGRvUE9TVF9pbXBvcnRMZW1tYURhdGE6CisJICogCisJICogUE9TVDogL2luZGV4L2FkZC97ZGF0YWJhc2VuYW1lfTogdGV4dC9wbGFpbgorCSAqIAorCSAqIFBhcmFtZXRlcnM6CisJICogbGlzdAkJIDogdGhlIGxpc3Qgb2Ygd2ZzIHNlbnQgaW4gdGhlIGJvZHkgb2YgdGhlIFBPU1QgcmVxdWVzdC4KKwkgKiBkYnBhdGgJIDogdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSB0aGUgbGVtbWErd2ZzIGFyZSB0byBiZSBzdG9yZWQuCisJICogTm90ZXMgICAgIDoKKwkgKiAtIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlIGxvY2F0ZWQgYXQgJ2RhdGFiYXNlbmFtZScuCisJICogLSBUaGUgd2ZzIGFyZSBsZW1tYXRpemVkIGFuZCB0aGUgbW9ycGhvbG9naWNhbCBkYXRhIHN0b3JlZCBpbnRvIGEgRGVyYnkgZGF0YWJhc2UuCisJICogSW5wdXQJIDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICogMDQuMTEuMjEvRkIKKwkgKiAtIHN1Ym1pdHRlZCBkYXRhYmFzZSBwYXRoLgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlcGF0aH0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlcGF0aCIpIAlmaW5hbCBTdHJpbmcgZGJwYXRoCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIAorCQlhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gbnVsbDsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC97ZGJwYXRofSIpOworCQorCWRicGF0aC5yZXBsYWNlKCcuJywgJy8nKTsKKwkKKwlmb3V0LnByaW50ZigiSW5mbyA6ICVzOiBzZWxlY3RlZCBkYXRhYmFzZSBwYXRoID0gJyVzJy5cbiIsIGZ1bmMsIGRicGF0aCk7CisJZm91dC5wcmludGYoIkluZm8gOiAlczogd29ya2luZyBkaXJlY3RvcnkgPSAnJXMnLlxuIiwgZnVuYywgR1NfV29ya2luZ1BhdGgpOworCQorCS8vIHNldCBmaWxlIGFuZCBwYXRocyBhZnRlciBHU19Xb3JraW5nUGF0aCBoYXMgYmVlbiBpbml0aWFsaXNlZDoKKwlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgZm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShmZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzLCBmb3V0LCBmZXJyKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZsO8aHJ1bmcgT0suPC9wPiI7CisJZWxzZQorCQltc2dHbGVtbVNjcmlwdCA9ICI8cD48Yj5HbGVtbSBTY3JpcHQ6PC9iPiBGZWhsZXIgYXVmZ2V0cmV0ZW4hIjsKKwkKKwkvLyBCdWlsZCBhIHJlcG9uc2UgYW5kIHJldHVybiBpdDoKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIAorCQkgICAiPGh0bWw+IiArCisJCSAgICI8aDE+R2xlbW1TZXJ2aWNlczogUE9TVCBvbiAvaW5kZXgvYWRkOiBhZGQgTGlzdCBvZiB3b3JkZm9ybXMuPC9oMT4iICsKKwkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCSAgICI8cD5MaXN0IGxlbmd0aCA9IiArIGFyTGlzdC5sZW5ndGggKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEsIHByb3BzLCBkYnBhdGgpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCQorCX0gLy8gZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCisJLyogZG9HRVRfdmlld0RiSW5mbzoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vOiB0ZXh0L3BsYWluID4gdGV4dC9odG1sLiAKKwkgKiBSZXR1cm5zIGdlbmVyYWwgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUKKwkgKiBHbGVtbSBMZW1tYSBEYXRhYmFzZS4KKwkgKiAxMC4wMS4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoImluZm8iKSBAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0RiSW5mbygpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0RiSW5mbyI7CisJaW50CisJCWksIHI7CisJU3RyaW5nCisJCXJldHVybkNvbnRlbnQ7CisJZmluYWwgU3RyaW5nCisJCXJldHVybkhlYWRlciA9IAkiPGh0bWw+PGhlYWQ+XG4iICsgCisJCQkJCQkiIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuIiArIAorCQkJCQkJIjwvaGVhZD5cbiIgKyAKKwkJCQkJCSI8aDE+R2xlbW1TZXJ2aWNlczogR0VUIG9uIC9pbmRleC9pbmZvPC9oMT5cbiIgKworCQkJCQkJIjxoND4odmVycyA9ICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vIik7CisJCisJZGJJbmZvID0gR2xlbW1EQi5yZWFkRGJJbmZvcyhwcm9wcyk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJdGFibGUuYXBwZW5kKCI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiIpOworCWVsc2UKKwkJeworCQl0YWJsZS5hcHBlbmQoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCIyXCIgY2VsbHNwYWNpbmc9XCIyXCI+XG4iKTsKKwkKKwkJZm9yKGk9MDsgaTxkYkluZm8uY291bnRzLmxlbmd0aDsgaSsrKQorCQkJeworCQkJbXNnID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuR0VSTUFOLCAiIDx0cj48dGQ+PGI+QW56YWhsICVzPC9iPjwvdGQ+PHRkICVzPiUsZDwvdGQ+PC90cj5cbiIsIGRiSW5mby5jb3VudExhYmVsc1tpXSwgYWxyaSwgZGJJbmZvLmNvdW50c1tpXSk7CisJCQl0YWJsZS5hcHBlbmQobXNnKTsKKwkJCX0KKwkJdGFibGUuYXBwZW5kKCI8L3RhYmxlPiIpOworCQl9CisKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlmaW5hbCBTdHJpbmcKKwkJZGJOYW1lID0gU3RyaW5nLmZvcm1hdCgiPHA+PGI+ZGF0YWJhc2U8L2I+OiAlczwvcD4iLCBmb3JtYXREYk5hbWUocHJvcHMpKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgZGJOYW1lICsgdGFibGUgKyByZXR1cm5UcmFpbGVyOyAgCisJfSAvLyBkb0dFVF92aWV3REJJbmZvCisKKworCS8qIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMTMuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIGRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJICAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9IVE1MIjsKKwlpbnQKKwkJaSwgcjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm8vbGVtbWE8L2gxPlxuIiArCisJCQkJCQkiPGg0PnZlcnNpb24gIiArIHZlcnNpb24gKyAiIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiIHJlcXVlc3QgPSAnIiArIExvY2FsRGF0ZVRpbWUubm93KCkudG9TdHJpbmcoKS5yZXBsYWNlKCJUIiwgICIgIikgKyAiJzwvaT48L2g0PlxuIiArCisJCQkJCQkiPHA+PGI+UXVlcnkgU3ludGF4IDE6PC9iPiAoQzIgT3B0aW9ucyBTZXR0aW5nKTwvcD4iICsKKwkJCQkJCSI8cD48Y29kZT57bGVtbWF9PC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+e2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYyk8L2NvZGU+PC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbDwvY29kZT4gPGI+b3I8L2I+IDxjb2RlPsOWbD9vcHRzPWZsZXgrY29tcCtvdGhlcitzcGVjPC9jb2RlPjwvcD4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMjo8L2I+IChpbnRlcm5hbCBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX0/cHJvcDE9WzAxMl0mYW1wO3Byb3AyPVswMTJdJmFtcDtzcGVjPVswMTJdPC9jb2RlPiAod2hlcmUgZWFjaCBwcm9wMSwgcHJvcDIsIHNwZWMgaXMgb3B0aW9uYWwpLjwvcD5cbiIgKworCQkJCQkJIjxwPjxiPkV4YW1wbGU6PC9iPiA8Y29kZT7Dlmw/cHJvcDE9MCZhbXA7cHJvcDI9MSZhbXA7c3BlYz0yPC9jb2RlPjwvcD4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iOworCWZpbmFsIFN0cmluZworCQliYWNrZ3JvdW5kY29sb3IgPSAic3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwXCIiOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIj5cbiIpOworCVN0cmluZworCQltc2cgPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfSIpOworCQorCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSclZCcgcHJvcDI9JyVkJyBzcGVjPSclZCcuXG4iLCBmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwkvKiAKKwlmb3IoaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJCX0JCisJICovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXIhXG4iLCAgZnVuYyk7IAorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5FcnJvcjo8L2I+IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzITwvcD5cbiIpOyAKKwkJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7CisJCX0KKwkJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCXRhYmxlLmFwcGVuZCgiPHRoZWFkICIgKyBiYWNrZ3JvdW5kY29sb3IgKyAiPlxuIik7CisJaWYoIGxlbW1hSW5mby5vcHRzU2V0dGluZyA9PSBMZW1tYUluZm8uT1BUU19TRVRUSU5HX0MyICkgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IG9wdGlvbnMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMSxwcm9wMixzcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWFPcmlnKTsKKworCXRhYmxlLmFwcGVuZChtc2cpOworCQorCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+PGI+cHJvcDEgPSA8aT4nJXMnPC9pPiAmYW1wOyBwcm9wMiA9IDxpPiclcyc8L2k+ICZhbXA7IHNwZWMgPSA8aT4nJXMnPC9pPjwvdGg+PC90cj5cbiIsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMSA9PSAxID8gIisiIDogInVuZGVmIiwgCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICItIiA6IGxlbW1hSW5mby5wcm9wMiA9PSAxID8gIisiIDogInVuZGVmIiwKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnNwZWMgID09IDEgPyAiKyIgOiAidW5kZWYiKTsKKwl0YWJsZS5hcHBlbmQobXNnKTsKKworCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gc2NhbiBhbGwgd29yZGZvcm1zIGFuZCBmb3JtYXQgdGhlbSBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyOyAKKwkvLyBpZiBhbiBlcnJvciBvY2N1cmVzLCB3b3JkZm9ybSB3aWxsIGJlIG51bGw7CisJU3RyaW5nIAorCQl3b3JkZm9ybXMgPSBsZW1tYUluZm8ud2ZzMkhUTUwoKTsKKwkKKwkvLyBjbG9zZSBzcWwgc3R1ZmY6CisJaW50CisJCW5XZnMgPSBsZW1tYUluZm8ubldmczsKKwkKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlpZiggbGVtbWFJbmZvLm5XZnMgPT0gMCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPmtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZD48L3RyPlxuIjsKKwllbHNlIGlmKCBsZW1tYUluZm8ubldmcyA8IDAgfHwgd29yZGZvcm1zID09IG51bGwgKQorCQl3b3JkZm9ybXMgPSAiPHRyPjx0ZD5GZWhsZXIgYXVmZ2V0cmV0ZW46IGtlaW5lIFdvcnRmb3JtZW4gZ2VmdW5kZW4hPC90ZDwvdHI+XG4iOworCWVsc2UKKwkJdGFibGUuYXBwZW5kKCI8dHI+PHRkPjxiPkFuei4gZ2VmdW5kZW5lIFdvcnRmb3JtZW48L2I+ID0gIiArIGxlbW1hSW5mby5uV2ZzICsgIjwvdGQ+PC90cj5cbiIpOworCQkKKwl0YWJsZS5hcHBlbmQoIjwvdGhlYWQ+XG4iKTsKKwkKKwkvLyBsb2cgb3V0Y29tZToKKwlpZiggbldmcyA8IDAgKQorCQlmb3V0LnByaW50ZigiRXJyb3I6ICVzOiByZXR1cm5pbmcgMCByZXN1bHRzIFtIVE1MXS5cbiIsIGZ1bmMpOworCWVsc2UKKwkJZm91dC5wcmludGYoIkRlYnVnLiAlczogcmV0dXJuaW5nICVkIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYywgbldmcyk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIHRhYmxlLnRvU3RyaW5nKCkgKyAiPHRib2R5PlxuIiArIHdvcmRmb3JtcyArICI8L3Rib2R5PlxuIiArIHJldHVyblRyYWlsZXI7CisJCisJfSAvLyB2aWV3TGVtbWFJbmZvSFRNTAorCQorCS8qIHZpZXdMZW1tYUluZm9KU09OOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9bzErbzIrbzMuLi4KKwkgKiB3aGVyZTogb2kuLi4gPSAoZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpIGluIGFueSBvcmRlci4KKwkgKiBBcyBvcHRzIGlzIG9wdGlvbmFsLCBmbGV4IGlzIGRlZmF1bHQuCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiAKKwkgKiBSZXR1cm5zOiBhcHBsaWNhdGlvbi9qc29uLiAKKwkgKiBSZXR1cm5zIHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIG5vdGU6CisJICogLSBpZiBCcm93c2VyIHJlcXVlc3Q6IEhUVFBTZXJ2bGV0UmVxdWVzdC5hY2NlcHQgPSAndGV4dC9odG1sLC4uLnhtbC4uLicKKwkgKiAtIGlmIFdmb3JtU2VydmljZXMgcmVxdWVzdDogSHR0cFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICdhcHBsaWNhdGlvbi9qc29uJy4KKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqIAorCSAqIC0gc3VibWl0dGVkIFVSTCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hLCBpcyBpbnRlcnByZXRlZCBieSBnbGFzc2Zpc2ggYXMKKwkgKiAgIGJlaW5nIElTTy04ODU5LTEgZW5jb2RlZC4gV2hlbiB0aGUgcmVxdWVzdCBpcyBVVEYtOCBlbmNvZGVkLCBVbWxhdXRzIGFuZAorCSAqICAgJ8OfJyBhcmUgbWlzLWludGVycHJlZGVkLCBsZWFkaW5nIHRvIGFuIGVycm9uZXJvdXMgcmVxdWVzdCB0byB0aGUgRGVyYnkKKwkgKiAgIGRhdGFiYXNlLgorCSAqIC0gUmVxdWVzdGVkIGxlbW1hICdsZW1tYScgaGFzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIFVURi04IGZpcnN0LgorCSAqIC0gbm90ZTogZXZlbiB3aGVuIHN1Ym1pdHRpbmcgdGhlIEdFVCByZXF1ZXN0IGJ5IHNwZWNpZnlpbmcgJ2NoYXJlbmNvZGU9VVRGLTgnLAorCSAqICAgZ2xhc3NmaXNoIGRvZXMgbm90IGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSBhcyBleHBlY3RlZC4KKwkgKiAgIAorCSAqICAyMi4xMC4yMS9GQgorCSAqIAorCSAqIC0gaWYgYWNjZXB0PWFwcGxpY2F0aW9uL2pzb24gcmV0dXJuIFVURi04IChXZm9ybVNlcnZpY2VzKS4KKwkgKiAtIGVsc2UgaWYgYWNjZXB0PXRleHQvaHRtbCBkbyBub3QgdHJhbnNmb3JtIGNoYXJhY3RlciBlbmNvZGluZyAoQnJvd3NlcikuCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBDb25zdW1lcygiYXBwbGljYXRpb24vanNvbiwgdGV4dC9odG1sIikKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCQorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvSlNPTigKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCWZpbmFsIGJvb2xlYW4KKwkJYkVuY29kZUxlbW1hID0gZmFsc2U7CisJCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzIik7CisJCisJLyogdGVzdDoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJaWYoIGJFbmNvZGVMZW1tYSApCisJCXsKKwkJLy8gd2hlbiBhY2NlcHRpbmcgSlNPTiwgdXJsIGhhcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgsIGkuZS4gdGhlIHJlcXVlc3RlZCBsZW1tYToKKwkJdHJ5IHsKKwkJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obmV3IFN0cmluZyhsZW1tYS5nZXRCeXRlcygiSVNPLTg4NTktMSIpLCAidXRmLTgiKSk7CisJCQl9IAorCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQlMZW1tYVJlc3BvbnNlCisJCQkJbGVtcmVzcCA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbXJlc3ApLmJ1aWxkKCk7CisJCQl9CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgW1VURi04XSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCWVsc2UKKwkJeworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbdW5jaGFuZ2VkXSBvcHRpb25zPSclcycuXG4iLCBmdW5jLCBsZW1tYUluZm8ubGVtbWFPcmlnLCBvcHRpb25zKTsKKwkJfQorCisJLyogZG9lcyBub3QgaGVscDoKKwkgU3RyaW5nCisJIAlyZXF1ZXN0Q2hhckVuY29kaW5nID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldENoYXJhY3RlckVuY29kaW5nKCk7CisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiByZXF1ZXN0IGNoYXJhY3RlciBlbmNvZGluZyA9JyVzJy5cbiIsIGZ1bmMsIHJlcXVlc3RDaGFyRW5jb2RpbmcpOworCSovCisJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXsKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQkvL3JldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJfQorCWVsc2UgLy8gb24gZXJyb3JzOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7CisKKwl9IC8vIHZpZXdMZW1tYUluZm9KU09OCisJCisJLyogdmlld0xlbW1hSW5mb1RFWFQ6CisJICogCisJICogZWl0aGVyOgorCSAqIGEpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKQorCSAqICAgIHRoaXMgaXMgdGhlIG9yaWdpbmFsIEMyIEdsZW1tIE9wdGlvbiBTZXR0aW5nIGFuZCBzaG91bGQgYmUgdG90YWxseQorCSAqICAgIGNvbXBhdGlibGUgdG8gdGhlIHdheSBHbGVtbSBPcHRpb25zIHdvcmsgaW4gQ09TTUFTIElJLgorCSAqIGIpIEdFVCAvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Pyhwcm9wMT1uKSgmcHJvcDI9bikoJnNwZWM9bikKKwkgKiAgICB0aGlzIGlzIHRoZSBleHRlbmRlZCBtb2RlIGluIEtvckFQIHdoaWNoIGxldHMgZXZlcnkgZmxhZyBmcm9tIAorCSAqICAgIHRoZSBHbGVtbSBMZW1tYSB0YWJsZSBiZSBzZXQgaW5kaXZpZHVhbGx5OworCSAqICAgIHdoZXJlIG49MCA6IGZhbHNlLCBuPTEgOiB0cnVlOyBuPTIgOiB1bmRlZi4KKwkgKiAgICAKKwkgKiBUaGlzIFNlcnZpY2UgZXhwZWN0cyBmaXJzdCAib3B0cyIgdG8gYmUgc2V0IChwcmVjZWRlbmNlIG90aGVyIHRoZSAKKwkgKiBvdGhlciBvcHRpb25zKSAtPiBDMiBPcHRpb24gU2V0dGluZywgb3IgCisJICogb25lIG9mICJwcm9wMSIsICJwcm9wMiIgYW5kICJzcGVjIiwgaW4gd2hpY2ggY2FzZSAtPiBleHRlbmRlZCBmbGFnCisJICogc2V0dGluZyBpcyB1c2VkLgorCSAqIAorCSAqIERlZmF1bHQgaXMgP29wdHM9ZmxleC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/cHJvcDE9MCZwcm9wMj0xJnNwZWM9MgorCSAqIAorCSAqIE5vdGVzOgorCSAqICAgICAgICAgIAorCSAqIFJldHVybnM6IHRleHQvcGxhaW4uIAorCSAqIFJldHVybnMgb25seSB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAzMS4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvcGxhaW4iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2UgZG9HRVRfdmlld0xlbW1hSW5mb1RFWFQoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCI7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7IC8vIHVuZGVmLgorCVN0cmluZworCQlyZXN1bHQgPSAiIjsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsJCisKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJyBwcm9wMT0lZCBwcm9wMj0lZCBzcGVjPSVkLlxuIiwgCisJCQlmdW5jLCBsZW1tYSwgb3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKworCS8qCisJZm9yKGludCBpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwl7CisJCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNoYXIgYXQgJWQgPSAnJWMnID0gWyVkXS5cbiIsIGZ1bmMsIGksIGxlbW1hLmNoYXJBdChpKSwgbGVtbWEuY29kZVBvaW50QXQoaSkpOworCX0KKwkqLworCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlmZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvLCBwcm9wcyk7CisJCisJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCXN3aXRjaChhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQlyZXN1bHQgPSBsZW1tYUluZm8ucmVzMlRFWFQoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwkJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCWJyZWFrOworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQkvLyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgc2VlIHZpZXdMZW1tYUluZm9IVE1MKCkuCisJCXJlc3VsdCA9IG51bGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQl9CisJCisJLy8gY2xvc2U6CisJaWYoIGxlbW1hSW5mbyAhPSBudWxsICkKKwkJbGVtbWFJbmZvLmNsb3NlKCk7CisJCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJc3dpdGNoKCBhY2NlcHRlZEZvcm1hdCkKKwkJeworCWNhc2UgQUNDX0ZPUk1BVF9URVhUOgorCQkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJCWlmKCByZXN1bHQgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KHJlc3VsdCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLnR5cGUoTWVkaWFUeXBlLlRFWFRfUExBSU4pLmVudGl0eSgiIikuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisJCisJY2FzZSBBQ0NfRk9STUFUX0pTT046CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCApCisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5BQ0NFUFRFRCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCWVsc2UvLyBvbiBlcnJvcnM6CisJCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJCQkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKwkJLy8gYnJlYWs7CisKKwljYXNlIEFDQ19GT1JNQVRfSFRNTDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJvY2VkdXJlISIpLmJ1aWxkKCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUxfVFlQRSkuZW50aXR5KCJpbnRlcm5hbCBlcnJvcjogcmVxdWVzdGVkIEZvcm1hdCBpcyBub3Qga25vd24hIikuYnVpbGQoKTsKKwkJfQorCisKKwl9IC8vIHZpZXdMZW1tYUluZm9URVhUCisJCisJLyoKKwkgKiBUZXN0IGZ1bmN0aW9uOiAKKwkgKiBSZXR1cm5zIGN1cnJlbnQgY29udGVudCBvZiBMZW1tYSBEYXRhYmFzZS4KKwkgKiAwOS4xMC4yMC9GQgorCSAqLworCUBHRVQgQFBhdGgoInRlc3QvaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyB2aWV3RGJDb250ZW50KCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJ2aWV3RGJDb250ZW50IjsKKwlpbnQKKwkJcjsKKwlTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gIjxodG1sPjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L3Rlc3QvaW5mbzwvaDE+IiArCisJCQkJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiI7CisJU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJU3RyaW5nCisJCW1zZzsKKwlHbGVtbURCSW5mbworCQlkYkluZm87CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC90ZXN0L2luZm8vIik7CisKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQltc2cgPSAiPHA+PGI+RmVobGVyOjwvYj4gSW5oYWx0IGRlciBEYXRlYmFuayBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuITwvcD4iOworCWVsc2UKKwkJbXNnID0gIjxwPkFsbGVzIGd1dC48L3A+IjsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBtc2cgKyByZXR1cm5UcmFpbGVyOyAgCisJfQorCQorCS8qCisJICogZ2V0QWNjZXB0ZWRGb3JtYXQKKwkgKiAxNy4wMi4yMC9GQgorCSAqLworCSAKKwkgcHVibGljIGludCBnZXRBY2NlcHRlZEZvcm1hdCgpCisJIAorCSB7CisJIGZpbmFsIFN0cmluZworCSAJZnVuYyA9ICJnZXRBY2NlcHRlZEZvcm1hdCI7CisJRW51bWVyYXRpb248U3RyaW5nPgorCQluYW1lcyA9IGh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworCSAKKwkvL2ZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEhUVFAgUmVxdWVzdDpcbiIsIGZ1bmMpOworCisJd2hpbGUoIG5hbWVzLmhhc01vcmVFbGVtZW50cygpICkKKwkJeworCQlTdHJpbmcKKwkJCWtleSA9IChTdHJpbmcpbmFtZXMubmV4dEVsZW1lbnQoKSwKKwkJCXZhbCA9IChTdHJpbmcpaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlcihrZXkpOworCQkKKwkJZm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y4LzMwMjEwOTc2ODQyYjAwMWMxYzQxY2U1NTllYTVlMTZiIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC8zMDIxMDk3Njg0MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM0NWU3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC8zMDIxMDk3Njg0MmIwMDFjMWM0MWNlNTU5ZWE1ZTE2YgpAQCAtMCwwICsxLDcwMCBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVTeXN0ZW1zOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXgud3MucnMuQ29uc3VtZXM7CitpbXBvcnQgamF2YXgud3MucnMuRGVmYXVsdFZhbHVlOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QT1NUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aFBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLlByb2R1Y2VzOworaW1wb3J0IGphdmF4LndzLnJzLlF1ZXJ5UGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworQFBhdGgoIi9pbmRleCIpCisKK3B1YmxpYyBjbGFzcyBHbGVtbVNlcnZpY2VzIHsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uRGF0ZQk9ICIwNi4xMC4yMSI7IC8vIjE3LjA2LjIwIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyB2ZXJzaW9uCQk9ICIwLjEiOworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIEdTX1dvcmtpbmdQYXRoID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCT0gR1NfV29ya2luZ1BhdGggKyAiL2dsX3dmc19pbi50eHQiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lT3V0IAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5sb2ciOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lRXJyIAkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCWZpbmFsIHByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAk9IEdTX1dvcmtpbmdQYXRoICsgIi9kb0dsZW1tIjsKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZUxlbWF0YQk9IEdTX1dvcmtpbmdQYXRoICsgIi90bXAvbGVtMy51dGY4IjsKKworCUBDb250ZXh0CisJcHJpdmF0ZSBIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0OworCQorCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfVEVYVCAJPSAxOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSlNPTgkJPSAyOworCWZpbmFsIHByaXZhdGUgaW50CUFDQ19GT1JNQVRfSFRNTAkJPSAzOworCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKwkgKiAKKwkgKiBkb0dFVF9zdGF0dXMoKSBvbiAvaW5kZXgvc3RhdHVzLgorCSAqIAorCSAqIEdFVCBzdGF0dXMgb2YgR2xlbW0gU2VydmljZXMKKwkgKiAKKwkgKiAxNy4wNi4yMC9GQgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqLworCQorCUBQYXRoKCJzdGF0dXMiKQorCUBHRVQKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJCisJcHVibGljIFN0cmluZyBkb0dFVF9zdGF0dXMoKSAKKwkKKwl7CisJCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJCVN0cmluZworCQkJc3RhdHVzOworCQlVdGlscworCQkJdSA9IG5ldyBVdGlscygpOworCQlQcm9wZXJ0aWVzCisJCQlwcm9wczsKKwkJCisJCS8vIHJlYWQgdGVzdAorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCS8vSHR0cFNlcnZsZXRDb250ZXh0CisJCQorCQkvLyBodHRwU2VydmxldFJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW52KTsKKwkJSW5wdXRTdHJlYW0KKwkJCWluUHJvcCA9IEdsZW1tU2VydmljZXMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiKTsKKwkJCisJCXRyeSB7CisJCQlwcm9wcy5sb2FkKGluUHJvcCk7CisJCQl9IAorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJU3lzdGVtLmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGxvYWQgcHJvcHMgJ0dsZW1tU2VydmljZXMucHJvcGVydGllcychIiwgIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gZW5kIG9mIHJlYWQgdGVzdAorCQkKKwkJLy8gdGVzdAorCQkvKgorCQlwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisJCQorCQkgKiBwcm9wcy5zZXRQcm9wZXJ0eSgicCIsICJ0ZXN0Iik7CisJCSAqCisJCUZpbGVPdXRwdXRTdHJlYW0gb3V0OworCQl0cnkgeworCQkJb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImdsZW1tU2VydmljZXMucHJvcGVydGllcyIpOworCQkJcHJvcHMuc3RvcmUob3V0LCAgInRlc3QgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIik7CisJCQl9IAorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfTsKKwkJKi8KKwkJCisJCS8vIGVuZCBvdGVzdAorCQkKKwkJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCQlTeXN0ZW0ub3V0LnByaW50ZigiQVBJOiAlczogL2luZGV4L3N0YXR1cy8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCVN5c3RlbS5vdXQucHJpbnRmKCIjIyNcbiIpOworCisJCXN0YXR1cyA9IFN0cmluZy5mb3JtYXQoCSI8aHRtbD5cbiIgKworCQkJCQkJCSAgIAkiIDxoMz5HbGVtbSBTZXJ2aWNlczwvaDM+XG4iICsKKwkJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCQkiIDxwPjxiPlZlcnNpb24gZGF0ZTwvYj4gOiAlczwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5zdGF0dXM8L2I+ICA6IHJlYWR5LjwvcD4iICsKKwkJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkJIjwvaHRtbD4iLAorCQkJCQkJCQl2ZXJzaW9uLAorCQkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCQlyZXR1cm4gc3RhdHVzOwkKKwkJCisJfSAvLyBkb0dFVF9zdGF0dXMKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFBPU1Q6IC9pbmRleC9hZGQvOiB0ZXh0L3BsYWluCisJICogYWRkcyBhIGxpc3Qgb2YgbmV3IHdvcmRmb3JtcyB0byB0aGUgR2xlbW1TZXJ2aWNlJ3MgRGF0YWJhc2UuCisJICogVGhlIHdmcyBhcmUgbGVtbWF0aXplZCBhbmQgdGhlIG1vcnBob2xvZ2ljYWwgZGF0YSBzdG9yZWQKKwkgKiBpbnRvIHRoZSBkYXRhYmFzZS4KKwkgKiBJbnB1dDogd29yZGZvcm0gZGF0YSBleHBlY3RlZCBpbiBbVVRGLThdLgorCSAqIDI1LjExLjE5L0ZCCisJICovCisJQFBhdGgoImFkZCIpIEBQT1NUIEBDb25zdW1lcygidGV4dC9wbGFpbiIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBpbXBvcnRMZW1tYURhdGEoU3RyaW5nIGxpc3QpIAorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0TGVtbWFEYXRhIjsKKwlTdHJpbmdbXSBhckxpc3QgPSBsaXN0LnNwbGl0KCJcbiIpOworCQorCUZpbGVTeXN0ZW0gCisJCWZzID0gRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpOworCWphdmEubmlvLmZpbGUuUGF0aAorCQlwID0gZnMuZ2V0UGF0aChmbmFtZVdmcyk7CisJT3V0cHV0U3RyZWFtIAorCQlvczsKKwlib29sZWFuCisJCWJEb25lID0gZmFsc2U7CisJU3RyaW5nCisJCW1zZzsKKwlpbnQKKwkJbkVycm9ycyA9IDA7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvYWRkLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJCisJLy8gV3JpdGUgc3VibWl0dGVkIGxpc3Qgb2Ygd29yZGZvcm1zIHRvIGZpbGU6CisJdHJ5CisJCXsKKwkJb3MgPSBGaWxlcy5uZXdPdXRwdXRTdHJlYW0ocCk7CisJCW9zLndyaXRlKGxpc3QuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKSk7CisJICAgIG9zLmNsb3NlKCk7CisJICAgIGJEb25lID0gdHJ1ZTsKKwkgICAgU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZmlsZSAnJXMnIGJlc2NocmllYmVuLlxuIiwgZnVuYywgZm5hbWVXZnMpOworCSAgICB9CisJY2F0Y2goSU9FeGNlcHRpb24gZSkKKwkJeworCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorICAgIAorCWlmKCBiRG9uZSApCisJCW1zZyA9ICI8cD5MaXN0IHdyaXR0ZW4gdG8gZmlsZTogIiArIHAudG9TdHJpbmcoKSArICI8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD48Yj5GaWxlIEVycm9yOiA8L2I+IGNhbm5vdCB3cml0ZSB0byAiICsgcC50b1N0cmluZygpICsgIiE8L3A+IjsKKwkKKwkvKgorCSAqICBleGVjdXRlIEdsZW1tIHNoZWxsIHNjcmlwdDoKKwkgKi8KKwlTdHJpbmcKKwkJbXNnR2xlbW1TY3JpcHQsIG1zZ0ltcG9ydDsKKwlpbnQgCisJCXIgPSBVdGlscy5leGVjdXRlU2hlbGxTY3JpcHQoZm5hbWVTY3JpcHQsIGZuYW1lV2ZzKTsKKwkKKwlpZiggciA9PSAwICkKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gQXVzZu+/vWhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgIjxoMj5MaXN0IGlzdDo8L2gyPlxuIiArIGxpc3QgKyAKKwkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArCisJCSAgICI8L2h0bWw+IjsgCisJCisJCisJLy8gUmVhZCBsZW1tYXRpemVkIGRhdGEgYW5kIHN0b3JlIHRoZW0gaW50byBkYXRhYmFzZToKKwluRXJyb3JzID0gR2xlbW1EQi5pbXBvcnRHbGVtbUxlbW1hdGEoZm5hbWVMZW1hdGEpOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGltcG9ydEdsZW1tTGVtbWF0YSByZXR1cm5zIHI9JWQuXG4iLCBmdW5jLCByKTsKKwlpZiggbkVycm9ycyA9PSAwICkKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6IE9LLjwvcD4iOworCWVsc2UKKwkJbXNnSW1wb3J0ID0gIjxwPjxiPkltcG9ydDo8L2I+ICIgKyBmbmFtZUxlbWF0YSArICI6ICIgKyBuRXJyb3JzICsgIiBlcnJvcnMhPC9wPiI7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogZW5kaW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwkvLyBSZXR1cm4gSW5mb3M6CisJcmV0dXJuIAorCQkJICAgIjxodG1sPiIgKworCQkJICAgIjxoMT5HbGVtbVNlcnZpY2VzOiBQT1NUIG9uIC9pbmRleC9hZGQ6IGFkZCBMaXN0IG9mIHdvcmRmb3Jtcy48L2gxPiIgKworCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IiArCisJCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkJICAgIjxwPkxpc3QgbGVuZ3RoID0iICsgYXJMaXN0Lmxlbmd0aCArCisJCQkgICAiPGgyPkxpc3QgaXN0OjwvaDI+XG4iICsgbGlzdCArIAorCQkJICAgIjxoMj5FbmRvZmxpc3Q8L2gyPiIgKworCQkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKyBtc2dJbXBvcnQgKworCQkJICAgIjwvaHRtbD4iOworCX0KKworCS8qIHZpZXdEYkluZm86CisJICogCisJICogR0VUIC9pbmRleC9pbmZvLzogdGV4dC9wbGFpbiA+IHRleHQvaHRtbC4gCisJICogUmV0dXJucyBnZW5lcmFsIGluZm9zIGFib3V0IHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICogR2xlbW0gTGVtbWEgRGF0YWJhc2UuCisJICogMTAuMDEuMjAvRkIKKwkgKi8KKwlAR0VUIEBQYXRoKCJpbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkluZm8oKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkluZm8iOworCWludAorCQlpLCByOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mbzwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIpPC9oND5cbiIgKyAKKwkJCQkJCSI8aDI+Q3VycmVudCBzdGF0ZSBvZiB0aGUgRGF0YWJhc2U8L2gyPlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IiwKKwkJYWxyaSAgICAgICAgICA9ICJhbGlnbj0ncmlnaHQnIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlHbGVtbURCSW5mbworCQlkYkluZm8gPSBudWxsOworCQorCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MoKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIHZpZXdEQkluZm8KKworCisJLyogdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+KHZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgLSBTdGF0dXM6IDxpPldvcmsgaW4gcHJvZ3Jlc3MuLi4hPC9pPik8L2g0PlxuIjsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlmaW5hbCBTdHJpbmcKKwkJYmFja2dyb3VuZGNvbG9yID0gInN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMFwiIjsKKwlTdHJpbmdCdWlsZGVyCisJCXRhYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIoIjx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKTsKKwlTdHJpbmcKKwkJbXNnID0gbnVsbDsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJCisJLy8gU2V0IFN0YW5kYXJkIEZpbGUgb3V0cHV0IHN0cmVhbXM6CisJVXRpbHMuc2V0U3RkRmlsZVN0cmVhbXMoZm5hbWVFcnIsIGZuYW1lT3V0KTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiAvaW5kZXgvaW5mby9sZW1tYS8gOiB2ZXJzaW9uPSclcycsIGRhdGU9JyVzJywgcmVxdWVzdGVkPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uLCB2ZXJzaW9uRGF0ZSwgTG9jYWxEYXRlVGltZS5ub3coKSk7CisKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zKTsKKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCVN5c3RlbS5lcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggIW9wdGlvbnMuZXF1YWxzKCJ1bmRlZiIpKQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBvcHRpb25zID0gPGk+JyVzJzwvaT48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEsIGxlbW1hSW5mby5vcHRpb25zdG9TdHJpbmcoKSk7CisJZWxzZQorCQltc2cgPSBTdHJpbmcuZm9ybWF0KCI8dHI+PHRoPkxlbW1hID0gJyVzJyAmYW1wOyBwcm9wMS9wcm9wMi9zcGVjIHNldCBkaXJlY3RseS48L3RoPjwvdHI+XG4iLCBsZW1tYUluZm8ubGVtbWEpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8pOworCQorCS8vIHNjYW4gYWxsIHdvcmRmb3JtcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcjsgCisJLy8gaWYgYW4gZXJyb3Igb2NjdXJlcywgd29yZGZvcm0gd2lsbCBiZSBudWxsOworCVN0cmluZyAKKwkJd29yZGZvcm1zID0gbGVtbWFJbmZvLndmczJIVE1MKCk7CisJCisJLy8gY2xvc2Ugc3FsIHN0dWZmOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyB0YWJsZS50b1N0cmluZygpICsgIjx0Ym9keT5cbiIgKyB3b3JkZm9ybXMgKyAiPC90Ym9keT5cbiIgKyByZXR1cm5UcmFpbGVyOworCQorCX0gLy8gdmlld0xlbW1hSW5mb0hUTUwKKwkKKwkvKiB2aWV3TGVtbWFJbmZvSlNPTjoKKwkgKiAKKwkgKiBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPW8xK28yK28zLi4uCisJICogd2hlcmU6IG9pLi4uID0gKGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKSBpbiBhbnkgb3JkZXIuCisJICogQXMgb3B0cyBpcyBvcHRpb25hbCwgZmxleCBpcyBkZWZhdWx0LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogCisJICogUmV0dXJuczogYXBwbGljYXRpb24vanNvbi4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAyNC4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorCSAKKwlwdWJsaWMgUmVzcG9uc2Ugdmlld0xlbW1hSW5mb0pTT04oCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgCWZpbmFsIFN0cmluZyBsZW1tYSwKKwkJCUBRdWVyeVBhcmFtKCJvcHRzIikgIEBEZWZhdWx0VmFsdWUoInVuZGVmIikJZmluYWwgU3RyaW5nIG9wdGlvbnMsCisJCQlAUXVlcnlQYXJhbSgicHJvcDEiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMSwKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMiIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AyLAorCQkJQFF1ZXJ5UGFyYW0oInNwZWMiKSAgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgc3BlYyApCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdMZW1tYUluZm9KU09OIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsKKwlMZW1tYUluZm8KKwkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhsZW1tYSk7CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCQorCS8vIFNldCBTdGFuZGFyZCBGaWxlIG91dHB1dCBzdHJlYW1zOgorCVV0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogL2luZGV4L2luZm8vbGVtbWEvIDogdmVyc2lvbj0nJXMnLCBkYXRlPSclcycsIHJlcXVlc3RlZD0nJXMnLlxuIiwgZnVuYywgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHN0YXJ0aW5nIHRpbWU6ICVzLlxuIiwgZnVuYywgTG9jYWxEYXRlVGltZS5ub3coKSk7CisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogR2xlbW1TZXJ2aWNlcyAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycuXG4iLCBmdW5jLCB2ZXJzaW9uRGF0ZSwgbGVtbWEsIG9wdGlvbnMpOworCQorCW5FcnJvcnMgPSBsZW1tYUluZm8ucGFyc2VBbGxPcHRpb25zKG9wdGlvbnMsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJbGVtbWFSZXNwID0gbGVtbWFJbmZvLnJlczJKU09OKCk7CisJCisJU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWFSZXNwOiBuV2ZzPSVkIGVyck1lc3M9JyVzJyBsaXN0PSclcycuXG4iLCBmdW5jLCBsZW1tYVJlc3AuaGVhZF9uV2ZzLCAKKwkJCQkJCWxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgIT0gbnVsbCA/IGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgOiAiLSIsCisJCQkJCQlsZW1tYVJlc3AubGlzdG9mV2ZzKTsKKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwkvKiByZXR1cm4gTGVtbWEgUmVzcG9uc2UgT2JqZWN0ICovCisJaWYoIGxlbW1hUmVzcC5oZWFkX2Vyck1lc3MgPT0gbnVsbCApCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLk9LKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwllbHNlIC8vIG9uIGVycm9yczoKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCisJfSAvLyB2aWV3TGVtbWFJbmZvSlNPTgorCQorCS8qIHZpZXdMZW1tYUluZm9URVhUOgorCSAqIAorCSAqIGVpdGhlcjoKKwkgKiBhKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT9vcHRzPShmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykKKwkgKiAgICB0aGlzIGlzIHRoZSBvcmlnaW5hbCBDMiBHbGVtbSBPcHRpb24gU2V0dGluZyBhbmQgc2hvdWxkIGJlIHRvdGFsbHkKKwkgKiAgICBjb21wYXRpYmxlIHRvIHRoZSB3YXkgR2xlbW0gT3B0aW9ucyB3b3JrIGluIENPU01BUyBJSS4KKwkgKiBiKSBHRVQgL2luZGV4L2luZm8vbGVtbWEve2xlbW1hfT8ocHJvcDE9bikoJnByb3AyPW4pKCZzcGVjPW4pCisJICogICAgdGhpcyBpcyB0aGUgZXh0ZW5kZWQgbW9kZSBpbiBLb3JBUCB3aGljaCBsZXRzIGV2ZXJ5IGZsYWcgZnJvbSAKKwkgKiAgICB0aGUgR2xlbW0gTGVtbWEgdGFibGUgYmUgc2V0IGluZGl2aWR1YWxseTsKKwkgKiAgICB3aGVyZSBuPTAgOiBmYWxzZSwgbj0xIDogdHJ1ZTsgbj0yIDogdW5kZWYuCisJICogICAgCisJICogVGhpcyBTZXJ2aWNlIGV4cGVjdHMgZmlyc3QgIm9wdHMiIHRvIGJlIHNldCAocHJlY2VkZW5jZSBvdGhlciB0aGUgCisJICogb3RoZXIgb3B0aW9ucykgLT4gQzIgT3B0aW9uIFNldHRpbmcsIG9yIAorCSAqIG9uZSBvZiAicHJvcDEiLCAicHJvcDIiIGFuZCAic3BlYyIsIGluIHdoaWNoIGNhc2UgLT4gZXh0ZW5kZWQgZmxhZworCSAqIHNldHRpbmcgaXMgdXNlZC4KKwkgKiAKKwkgKiBEZWZhdWx0IGlzID9vcHRzPWZsZXguCisJICogCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9vcHRzPWZsZXgrb3RoZXIKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP3Byb3AxPTAmcHJvcDI9MSZzcGVjPTIKKwkgKiAKKwkgKiBOb3RlczoKKwkgKiAgICAgICAgICAKKwkgKiBSZXR1cm5zOiB0ZXh0L3BsYWluLiAKKwkgKiBSZXR1cm5zIG9ubHkgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogMzEuMDEuMjAvRkIKKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQFByb2R1Y2VzKCJ0ZXh0L3BsYWluIikKKwkgCisJcHVibGljIFJlc3BvbnNlIHZpZXdMZW1tYUluZm9URVhUKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAidmlld0xlbW1hSW5mb1RFWFQiOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOyAvLyB1bmRlZi4KKwlTdHJpbmcKKwkJcmVzdWx0ID0gIiI7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCUxlbW1hUmVzcG9uc2UKKwkJbGVtbWFSZXNwID0gbnVsbDsKKwkKKwkvLyBTZXQgU3RhbmRhcmQgRmlsZSBvdXRwdXQgc3RyZWFtczoKKwlVdGlscy5zZXRTdGRGaWxlU3RyZWFtcyhmbmFtZUVyciwgZm5hbWVPdXQpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IC9pbmRleC9pbmZvL2xlbW1hLyA6IHZlcnNpb249JyVzJywgZGF0ZT0nJXMnLCByZXF1ZXN0ZWQ9JyVzJy5cbiIsIGZ1bmMsIHZlcnNpb24sIHZlcnNpb25EYXRlLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKwlTeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBzdGFydGluZyB0aW1lOiAlcy5cbiIsIGZ1bmMsIExvY2FsRGF0ZVRpbWUubm93KCkpOworCVN5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkJCisJbkVycm9ycyA9IGxlbW1hSW5mby5wYXJzZUFsbE9wdGlvbnMob3B0aW9ucywgcHJvcDEsIHByb3AyLCBzcGVjKTsKKwkKKwlpZiggbkVycm9ycyAhPSAwICkKKwkJeworCQlTeXN0ZW0uZXJyLnByaW50ZigiRXJyb3I6ICVzOiBFcnJvcnMgaW4gb3B0aW9ucyBQYXJhbWV0ZXI6ICclcychXG4iLCAgZnVuYywgb3B0aW9ucyk7IAorCQlMZW1tYVJlc3BvbnNlCisJCQlsZW1SZXNwRXJyID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJbGVtUmVzcEVyci5oZWFkX2Vyck1lc3MgPSBTdHJpbmcuZm9ybWF0KCJFcnJvcjogJXM6IG9wdGlvbnMgUGFyYW1ldGVyIGNvbnRhaW5zIHVua25vd24gdmFsdWVzOiAnJXMnIVxuIiwgZnVuYywgb3B0aW9ucyk7CisJCQorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5CQURfUkVRVUVTVCkudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbVJlc3BFcnIpLmJ1aWxkKCk7IAorCQl9CisJCQorCQorCS8vIGV4dHJhY3QgbGVtbWF0YSBmcm9tIEdsZW1tREI6CisJR2xlbW1EQi5yZWFkREJMZW1tYURhdGEobGVtbWFJbmZvKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5Db250ZW50OworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKCk7CisJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJbXNnID0gIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+IjsKKwllbHNlCisJCW1zZyA9ICI8cD5BbGxlcyBndXQuPC9wPiI7CisKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsgIAorCX0KKwkKKwkvKgorCSAqIGdldEFjY2VwdGVkRm9ybWF0CisJICogMTcuMDIuMjAvRkIKKwkgKi8KKwkgCisJIHB1YmxpYyBpbnQgZ2V0QWNjZXB0ZWRGb3JtYXQoKQorCSAKKwkgeworCSBmaW5hbCBTdHJpbmcKKwkgCWZ1bmMgPSAiZ2V0QWNjZXB0ZWRGb3JtYXQiOworCUVudW1lcmF0aW9uPFN0cmluZz4KKwkJbmFtZXMgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKwkgCisJLy9TeXN0ZW0ub3V0LnByaW50ZigiRGVidWc6ICVzOiBIVFRQIFJlcXVlc3Q6XG4iLCBmdW5jKTsKKworCXdoaWxlKCBuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSApCisJCXsKKwkJU3RyaW5nCisJCQlrZXkgPSAoU3RyaW5nKW5hbWVzLm5leHRFbGVtZW50KCksCisJCQl2YWwgPSAoU3RyaW5nKWh0dHBTZXJ2bGV0UmVxdWVzdC5nZXRIZWFkZXIoa2V5KTsKKwkJCisJCS8vU3lzdGVtLm91dC5wcmludGYoIkhlYWRlcjogJyVzJyA9ICclcycuXG4iLCBrZXksIHZhbCk7CisJCWlmKCBrZXkuZXF1YWxzKCJhY2NlcHQiKSApCisJCQl7CisJCQlzd2l0Y2goIHZhbCApCisJCQkJeworCQkJY2FzZSAidGV4dC9wbGFpbiI6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAndGV4dC9wbGFpbic6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCWNhc2UgImFwcGxpY2F0aW9uL2pzb24iOiAKKwkJCQlTeXN0ZW0ub3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9KU09OJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9KU09OOworCQkJY2FzZSAidGV4dC9odG1sIjogCisJCQkJU3lzdGVtLm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICdhcHBsaWMvSFRNTCc6IG9rLlxuIik7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfSFRNTDsKKwkJCWRlZmF1bHQ6IAorCQkJCVN5c3RlbS5vdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnJXMnID0gdW5rbm93biEgRGVmYXVsdD0ndGV4dC9wbGFpbicuXG4iLCB2YWwpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX1RFWFQ7CisJCQkJfQorCQkJfQorCQl9CisKKwlyZXR1cm4gMDsJLy8gc29tZXRoaW5nIHdyb25nLgkKKworIAl9IC8vIGdldEFjY2VwdGVkRm9ybWF0CQorCit9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y4LzQwYjI4YjEwMjczZTAwMWMxMzYzYmViOTMyYWU2M2ExIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC80MGIyOGIxMDI3M2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQ3ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uaGlzdG9yeS9mOC80MGIyOGIxMDI3M2UwMDFjMTM2M2JlYjkzMmFlNjNhMQpAQCAtMCwwICsxLDgwNiBAQAorcGFja2FnZSBkZS5rb3JhcC5zZXJ2aWNlczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOworaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7CitpbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5TdGF0ZW1lbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5VdGlsczsKKworcHVibGljIGNsYXNzIEdsZW1tREIKKworeworCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGRiVGFibGUgCT0gIkdsZW1tTGVtbWF0YSI7CisJc3RhdGljIFN0cmluZyBkYkxlbW1hIAkJIAk9ICJsZW1tYSI7CisJc3RhdGljIFN0cmluZyBkYldmCSAJCQk9ICJ3ZiI7CisJc3RhdGljIFN0cmluZyBkYlByb3AxIAkJCT0gInByb3AxIjsKKwlzdGF0aWMgU3RyaW5nIGRiUHJvcDIgCQkJPSAicHJvcDIiOworCisJLy8gRGVyYnkgRGF0YWJhc2UgYWNjZXNzIChvdmVyd3JpdHRlbiBieSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMpOgorCXByaXZhdGUgc3RhdGljIFN0cmluZyBmbmFtZURCID0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiI7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlcnZlckhvc3QgPSAiLy9sb2NhbGhvc3Q6MTUyNy8iOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZXJieURCVVJMID0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCS8vIERlcmJ5IERhdGFiYXNlIGFjY2VzcyAoZmluYWwgYXNzaWdubWVudHMpOgorCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckVtYiA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOworCWZpbmFsIHByaXZhdGUgIFN0cmluZyBkZXJieURyaXZlckNsaWVudCA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKKworCWZpbmFsIHN0YXRpYyBib29sZWFuCisJCXVzZVByZXBhcmVkU3RtdCA9IHRydWU7IC8vIDE9dXNlIFByZXBhcmVkU3RhdGVtZW50IGFuZCBub3QgU3RhdGVtZW50LgorCQorCS8vIHZhbHVlcyB0byBiZSBpbnNlcnRlZDogbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMuCisJc3RhdGljIFN0cmluZyBpbnNlcnRRdWVyeSA9ICJJTlNFUlQgaW50byAiICsgZGJUYWJsZSArICIgVkFMVUVTICgnJXMnLCAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnKSI7CisJc3RhdGljIFN0cmluZyBpbnNlcnRQcmVwYXJlZFF1ZXJ5ID0gIklOU0VSVCBpbnRvICIgKyBkYlRhYmxlICsgIiBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKwkKKwkvLyBDb25zdGFudHMgb2YgdGFibGUgR2xlbW1MZW1tYXRhOgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4TGVtbWFTaXplCT0gNjQ7IAkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCXN0YXRpYyBmaW5hbCBpbnQgbWF4V2ZTaXplCQk9IDY0OwkvLyBtYXguIG5vLiBvZiBjaGFycywgYXMgZGVjbGFyZWQgaW4gdGFibGUgR2xlbW1MZW1tYXRhLgorCQorCS8qIHZhcmlhYmxlcyAqLworCXN0YXRpYyBpbnQgbkV4Y2VwdFN0bXQJCQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBwcmVwYXJlZFN0bXQuCisJc3RhdGljIGludCBuRXhjZXB0SW5zZXJ0CQk9IDA7CS8vIGNvdW50IG5vLiBvZiBleGNlcHRpb25zIGZvciBJbnNlcnRzLgorCQorCS8qCisJICogc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzCisJICogCisJICogQXJndW1lbnRzOgorCSAqIHByb3BzCTogUHJvcGVydGllcyBsb2FkZWQgYnkgdGhlIEdsZW1tU2VydmljZXMuCisJICogTm90ZXM6CisJICogLSB0aGlzIGZ1bmN0aW9uIGxvYWRzIG9ubHkgdGhvc2UgQ29uc3RhbnRzIG5lZWRlZCBpbiB0aGlzIGNsYXNzLgorCSAqIDE1LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMoUHJvcGVydGllcwlwcm9wcykKKwkKKwl7CisJZm5hbWVEQgkJIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgCSIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9EYnMvRGVyYnlUZXN0REIiKTsKKwlzZXJ2ZXJIb3N0CQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJzZXJ2ZXJIb3N0IiwJIi8vbG9jYWxob3N0OjE1MjcvIik7CisJZGVyYnlEQlVSTCAJCT0gImpkYmM6ZGVyYnk6IiArIHNlcnZlckhvc3QgKyBmbmFtZURCOworCQkJCisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKiAgICBjaGVja0RlcmJ5Q29ubmVjdGlvbjoKKwkgKiAKKwkgKiBjaGVjayBpZiBEZXJieSBOZXR3b3JrIFNlcnZlciBpcyBhdmFpbGFibGUuCisJICogUmV0dXJuczogMCAoPU9LKSBvciAtMSAob24gZXJyb3IpLgorCSAqIDA1LjExLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IGNoZWNrRGVyYnlDb25uZWN0aW9uKCkKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gImNoZWNrRGVyYnlDb25uZWN0aW9uIjsKKwlDb25uZWN0aW9uIAorCQljb24gPSBudWxsOworCWludAorCQluRXJyb3JzID0gMCwKKwkJbkluc2VydGVkID0gMCwJLy8gbm8uIG9mIGxlbW1hL3dmIHBhaXJzIGltcG9ydGVkLgorCQlyZXQgPSAwOyAvLyBPSy4KKwkKKwkvLyBvcGVuIENvbm5lY3Rpb24gdG8gRGVyYnkgRGF0YWJhc2UsCisJLy8gc2V0IEF1dG9jb21taXQgPSBmYWxzZSB0byBhY2NlbGVyYXRlIGluc2VydGlvbnM6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQljb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZGVyYnlEQlVSTCk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkLlxuIiwgZnVuYyk7CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7IC8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJCWlmKCBjb24gIT0gbnVsbCApIAorCQkJCWNvbi5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwl9IC8vIGNoZWNrX0RlcmJ5Q29ubmVjdGlvbgorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiAJCQkJCWltcG9ydEdsZW1tTGVtYXRhCisJICogUGFyYW1ldGVyczoKKwkgKiBmbgkJIDogYWJzb2x1dGUgZmlsZSBuYW1lIG9mIEdMRU1NIG91dHB1dCBbSVNPODg1OS0xXSBleHBlY3RlZCwgbm90IFVURi04IQorCSAqIHByb3BzCSA6IFByb3BlcnRpZXMgdm9tIEdsZW1tU2VydmljZXMucHJvcGVydGllcyB0byBzZXQgY29uc3RhbnRzIG5lZWRlZAorCSAqIAkJCSAgIGluIHRoaXMgY2xhc3MuCisJICogZGJwYXRoCSA6IGxvY2F0aW9uICsgbmFtZSBvZiBkYXRhYmFzZSB3aGVyZSB0byBzdG9yZSBsZW1tYXRhK3dmcy4KKwkgKiBSZXR1cm5zCSA6IDA9T0ssIC0xOiBnZW5lcmFsIGVycm9yOyA+IDAgOiBuby4gb2YgbGVtbWF0YSBub3Qgc3RvcmVkLgorCSAqIAorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgZHluYW1pY2FsbHkgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogMDQuMTEuMjEvRkIgZGJwYXRoLgorCSAqIAorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHVibGljIHN0YXRpYyBpbnQgaW1wb3J0R2xlbW1MZW1tYXRhKFN0cmluZyBmbiwgUHJvcGVydGllcyBwcm9wcywgZmluYWwgU3RyaW5nIGRicGF0aCkKKwkKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiaW1wb3J0R2xlbW1MZW1tYXRhIjsKKwlCdWZmZXJlZFJlYWRlcgorCQlpbiA9IG51bGw7CisJaW50CisJCW5FcnJvcnM7CisJCisJLy8gbG9hZCBHbGVtbVNlcnZpY2VzIHByb3BlcnRpZXMgYW5kIGxvZyB0aGVtICh3aGVuIGxhc3QgcGFyYW0gPSB0cnVlKToKKwlzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMocHJvcHMpOworCQorCS8vIHdoZW4gaW5kZXhpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSwgc2VsZWN0IHRoZSBzdWJtaXR0ZWQgZGJwYXRoLAorCS8vIChub3QgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIEdsZW1tU2VydmljZXMucHJvcGVydGllcyk6CisJZGVyYnlEQlVSTCA9ICJqZGJjOmRlcmJ5OiIgKyBzZXJ2ZXJIb3N0ICsgZGJwYXRoOworCQorCS8vIG9wZW4gcmVhZGVyIG9uIEdsZW1tIExlbW1hdGE6CisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZm4pKTsKKwkJCisJCW5FcnJvcnMgPSB3cml0ZURCTGVtbWF0YShpbik7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIGZyb20gJyVzJyFcbiIsIGZ1bmMsIGZuKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwkvLyBjbG9zZSBSZWFkZXI6CisJdHJ5IHsKKwkJaW4uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQluRXJyb3JzID0gLTE7CisJCX0KKwkKKyAJaWYoIG5FcnJvcnMgPT0gMCApCisgCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydCBkb25lIHN1Y2Nlc3NmdWxseS5cbiIsIGZ1bmMpOworIAllbHNlCisgCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJEZWJ1ZzogJXM6IEltcG9ydDogJWQgRXJyb3JzIVxuIiwgZnVuYywgbkVycm9ycyk7CisgCQorCXJldHVybiBuRXJyb3JzOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhCisJCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIAorCSAqICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURCTGVtbWF0YSgpCisJICogICAgICAgICAgICAgICAgICAgICAgIAorCSAqIHN0b3JlcyBsaXN0IG9mIGxlbW1hdGEgKyBpbmZvcyBpbnRvIERlcmJ5IGRiLgorCSAqIEZpbGUgZm9ybWF0OiAiTGVtbWEgRGVjb21wb3NpdGlvbiBXZiIsCisJICogICAgICAgICAgICAgIGUuZy46ICJIw6R1c2VyICstIEhhdXMiLgorCSAqIFJldHVybnM6IDAgPSBPSyBvciAtMTogZ2VuZXJhbCBlcnJvciBvciA+IDA6IG5vLiBvZiBsZW1tYXRhIG5vdCBzdG9yZWQuCisJICogMDkuMDEuMjAvRkIKKwkgKiAwNC4xMS4yMS9GQiB0dXJuIGF1dG9jb21taXQgb2ZmIHRvIGFjY2VsZXJhdGUgaHVnZSBhbW91bnQgb2YgaW5zZXJ0aW9ucy4KKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hdGEoQnVmZmVyZWRSZWFkZXIgaW4pCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJ3cml0ZURCTGVtbWF0YSI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlQcmVwYXJlZFN0YXRlbWVudAorCQlzdG10UHJlcCA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgCSA9IG51bGw7CisJU3RyaW5nCisJCWxpbmU7CQorCVN0cmluZ1tdCisJCWxlbW1hSW5mbzsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCW5JbnNlcnRlZCA9IDAsCS8vIG5vLiBvZiBsZW1tYS93ZiBwYWlycyBpbXBvcnRlZC4KKwkJcmV0ID0gMDsgLy8gT0suCisJYm9vbGVhbgorCQljb250YWluc1NwZWM7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlLAorCS8vIHNldCBBdXRvY29tbWl0ID0gZmFsc2UgdG8gYWNjZWxlcmF0ZSBpbnNlcnRpb25zOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQljb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGVkIChhdXRvQ29tbWl0PW9mZikuXG4iLCBmdW5jKTsKKwkJCisJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJc3RtdFByZXAgPSBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRQcmVwYXJlZFF1ZXJ5KTsKKwkJZWxzZQorCQkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKworCQl3aGlsZSggKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCS8vU3lzdGVtLm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggIT0gMyApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogJyVzJyBoYXMgJWQgY29tcG9uZW50cyEgRXhwZWN0ZWQgPSAzISBDYW5ub3QgYmUgc3RvcmVkIVxuIiwgZnVuYywgbGluZSwgbGVtbWFJbmZvLmxlbmd0aCk7CisJCQkJbkVycm9ycysrOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQorCQkJLy8gR2V0IEluZm8sIGlmIHdvcmRmb3JtIGNvbnRhaW5zIHNwZWNpYWwgY2hhcnMgbGlrZSAnLScsIGludGVycHVuY3Rpb24gZXRjLjoKKwkJCS8vIGxlbW1hSW5mb1syXSA9IHdvcmRmb3JtLgorCQkJY29udGFpbnNTcGVjID0gTGVtbWFJbmZvLmlzV2ZTcGVjaWFsQ2FzZShsZW1tYUluZm9bMl0pOworCQkJLy8gc3RvcmUgaW50byBEQjoKKwkJCWlmKCB1c2VQcmVwYXJlZFN0bXQgKQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKHN0bXRQcmVwLCBsZW1tYUluZm9bMF0sIGxlbW1hSW5mb1syXSwgbGVtbWFJbmZvWzFdLCBjb250YWluc1NwZWMpOworCQkJZWxzZQorCQkJCXJldCA9IHdyaXRlREJMZW1tYUluZm9zKHN0bXQsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzJdLCBsZW1tYUluZm9bMV0sIGNvbnRhaW5zU3BlYyk7CisJCQkKKwkJCWlmKCByZXQgIT0gMCApCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHN0b3JlIGxlbW1hICclcycgaW50byBEQiEgKHJldD0lZClcbiIsIGZ1bmMsIGxpbmUsIHJldCk7CisJCQkJbkVycm9ycysrOyAKKwkJCQl9CisJCQllbHNlCisJCQkJbkluc2VydGVkKys7CisJCQl9IC8vIHdoaWxlCisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSByZWFkaW5nIEdsZW1tIGxlbW1hdGEraW5mb3MgZnJvbSBmaWxlISBFeGl0IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsgCisJCX0JCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiAtMTsKKwkJfQorCWZpbmFsbHkgCisJCXsgCisJCXRyeSB7CisJCQkvLyBpbXBvcnRhbnQ6IG5vdyBjb21taXQsIGFzIGF1dG9Db21taXQgaXMgZGVhY3RpdmF0ZWQsCisJCQkvLyB0aGlzIGFsc28gcmVtb3ZlcyBkYXRhYmFzZSBsb2NrczoKKwkJCWNvbi5jb21taXQoKTsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29tbWl0IHN1Y2Nlc3NmdWxsLlxuIiwgZnVuYyk7CisJCQl9IAorCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhlIHdmcyBsaXN0IGZhaWxlZCFcbiIsIGZ1bmMpOworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQkKKwkJdHJ5IHsgLy8gY2xvc2luZyBjb25uZWN0aW9uOgorCQkJaWYoIGNvbiAhPSBudWxsICkgCisJCQkJY29uLmNsb3NlKCk7CisJCQlpZiggc3RtdCAhPSBudWxsICkgCisJCQkJc3RtdC5jbG9zZSgpOworCQkJaWYoIHN0bXRQcmVwICE9IG51bGwgKSAKKwkJCQlzdG10UHJlcC5jbG9zZSgpOworCQkJfSAKKwkJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQkJfQkJCisJCX0KKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJJbmZvIDogJXM6IG5vLiBvZiBsZW1tYXRhL3dmIHBhaXJzIGluc2VydGVkID0gJWQuXG4iLCBmdW5jLCBuSW5zZXJ0ZWQpOworCQorCXJldHVybiBuRXJyb3JzOyAvLyAwPU9LLCA+MCA9IG5vLiBvZiBlcnJvcnMuCisJfSAvLyB3cml0ZURCTGVtbWF0YQorCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvc19wcmVwYXJlZDoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBydWxlcyBpbnRvIERlcmJ5IERCLgorCSAqIE5vdGVzOgorCSAqIC0gdGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoIGEgUHJlcGFyZWRRdWVyeS4KKwkgKiBQYXJhbWV0ZXJzOgorCSAqIHNwZWMgOiBpZiB0cnVlOiBsZW1tYSBjb250YWlucyBzcGVjaWFsIGNoYXJzIGxpa2UgaHlwaGVuIGV0Yy4KKwkgKiByZXR1cm5zIDAgPSBPSy4KKwkgKiAxNy4wMS4yMC9GQgorCSAqIDA1LjEuMjEvRkIgcmVqZWN0IGxlbW1hL3dmID4gNjQgY2hhcnMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkKAorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCwgCisJCQlTdHJpbmcgbGVtbWEsIAorCQkJU3RyaW5nIHdmLCAKKwkJCVN0cmluZyBkZWNvbXBvc2l0aW9uLCAKKwkJCWJvb2xlYW4gc3BlYykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gIndyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkIjsKKwlmaW5hbCBib29sZWFuCisJCWJMb2cgPSBmYWxzZTsKKwlTdHJpbmcKKwkJc3FsSW5zZXJ0ID0gbnVsbDsKKwlib29sZWFuCisJCXByb3AxLCBwcm9wMjsKKwlpbnQKKwkJbjsKKwkKKwkvLyBjaGVjayBzaXplIG9mIHdmIGFuZCBsZW1tYSBhZ2FpbnN0IGZpZWxkIHNpemUgaW4gdGFibGUgR2xlbW1MZW1tYXRhOgorCWlmKCBsZW1tYS5sZW5ndGgoKSA+PSBHbGVtbURCLm1heExlbW1hU2l6ZSApIAorCQl7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogbGVtbWEgcmVqZWN0ZWQgKD4gJWQpOiAnJXMnIVxuIiwKKwkJCQlmdW5jLCBtYXhMZW1tYVNpemUsIGxlbW1hKTsKKwkJcmV0dXJuIDQ7CisJCX0KKwlpZiggd2YubGVuZ3RoKCkgPj0gR2xlbW1EQi5tYXhXZlNpemUgKSAKKwkJeworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdmIHJlamVjdGVkICg+ICVkKTogJyVzJyFcbiIsCisJCQkJZnVuYywgbWF4V2ZTaXplLCB3Zik7CisJCXJldHVybiA1OworCQl9CisJIAorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICAKKwkvLyBmb3IgbG9naW5nIG9ubHk6CisJc3FsSW5zZXJ0ID0gU3RyaW5nLmZvcm1hdChpbnNlcnRRdWVyeSwgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCWlmKCBiTG9nICkKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisgICAgLy8gbm93IGluc2VydCBuZXcgdmFsdWVzIGludG8gUHJlcGFyZWRTdGF0ZW1lbnQ6CisgICAgdHJ5IHsKKyAgICAJc3RtdC5zZXRTdHJpbmcoIDEsIGxlbW1hKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoIDIsIHdmKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDMsIHByb3AxKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDQsIHByb3AyKTsKKyAgICAgICAgc3RtdC5zZXRCb29sZWFuKDUsIHNwZWMpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByZXBhcmVkIHN0bXQgPSAnJXMnLlxuIiwgIGZ1bmMsIHN0bXQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUxKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoCSJFcnJvcjogJXM6IHdoaWxlIGZpbGxpbmcgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSclYicgcHJvcDI9JyViJyBzcGVjPSclYichXG4iLCAgCisJCQkJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQlpZiggKytuRXhjZXB0U3RtdCA8PSAxICkKKwkJCWUxLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorICAgIHRyeSB7CisJCS8vIGV4ZWN1dGUgdGhlIGZpbGxlZCBwcmVwYXJlZCBzdGF0ZW1lbnQ6CisJCW4gPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAJCWlmKCBuICE9IDEgKQorCSAJCXsKKyAJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IHdoaWxlIGluc2VydGluZyBsZW1tYT0nJXMnIHdmPSclcycgcHJvcDE9JWIgcHJvcDI9JWIgc3BlYz0lYiEgKG49JWQpXG4iLCAKKyAJCQkJCWZ1bmMsIGxlbW1hLCB3ZiwgcHJvcDEsIHByb3AyLCBzcGVjLCBuKTsKKyAJCQlyZXR1cm4gMjsKKwkgCQl9CisJCX0KKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiB3aGlsZSBpbnNlcnRpbmcgbGVtbWE9JyVzJyB3Zj0nJXMnIHByb3AxPSViIHByb3AyPSViIHNwZWM9JWIhXG4iLCAKKwkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisJCWlmKCArK25FeGNlcHRJbnNlcnQgPD0gMSApCisJCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMzsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zX3ByZXBhcmVkCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiB3cml0ZURCTGVtbWFJbmZvczoKKwkgKiB3cml0ZSBMZW1tYSArIFdmICsgRGVjb21wb3NpdGlvbiBpbnRvIERlcmJ5IERCLgorCSAqIFBhcmFtZXRlcnM6CisJICogY29udGFpbnNTcGVjIDogaWYgdHJ1ZTogbGVtbWEgY29udGFpbnMgc3BlY2lhbCBjaGFycyBsaWtlIGh5cGhlbiBldGMuCisJICogcmV0dXJucyAwID0gT0suCisJICogMTAuMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBpbnQgd3JpdGVEQkxlbW1hSW5mb3MoU3RhdGVtZW50IHN0bXQsIFN0cmluZyBsZW1tYSwgU3RyaW5nIHdmLCBTdHJpbmcgZGVjb21wb3NpdGlvbiwgYm9vbGVhbiBzcGVjKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAid3JpdGVEQkxlbW1hSW5mb3MiOworCVN0cmluZworCQlzcWxJbnNlcnQgPSBudWxsOworCUJvb2xlYW4KKwkJcHJvcDEsIHByb3AyOworCWludAorCQluOworCQorCXByb3AxICAgICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDApID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKwlwcm9wMiAJICA9IGRlY29tcG9zaXRpb24uY2hhckF0KDEpID09ICcrJyA/IHRydWUgOiBmYWxzZTsKKyAgICBzcWxJbnNlcnQgPSBTdHJpbmcuZm9ybWF0KGluc2VydFF1ZXJ5LCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgICAgCisgICAgR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBzcWxJbnNlcnQ9JyVzJy5cbiIsIGZ1bmMsIHNxbEluc2VydCk7CisgICAgCisJdHJ5IHsKKwkJbiA9IHN0bXQuZXhlY3V0ZVVwZGF0ZShzcWxJbnNlcnQpOworIAkJaWYoIG4gIT0gMSApCisJIAkJeworIAkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisgCQkJCQlmdW5jLCBsZW1tYSwgd2YsIHByb3AxLCBwcm9wMiwgc3BlYyk7CisgCQkJcmV0dXJuIDE7CisJIAkJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hpbGUgaW5zZXJ0aW5nIGxlbW1hPSclcycgd2Y9JyVzJyBwcm9wMT0lYiBwcm9wMj0lYiBzcGVjPSViIVxuIiwgCisJCQkJZnVuYywgbGVtbWEsIHdmLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfTsKKwkKKwlyZXR1cm4gMDsgLy8gT0sKKwl9IC8vIHdyaXRlREJMZW1tYUluZm9zCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hRGF0YQorCSAqIAorCSAqIFJlYWRzIHdvcmRmb3JtcyBmb3Igb25lIGxlbW1hIGZyb20gdGhlIEdsZW1tREIuCisJICogSW5wdXQ6IGxlbW1hICsgR0xFTU1fT1BUU194eHggKGxlbW1hdGl6YXRpb24gcnVsZXMpLgorCSAqICAKKwkgKiAxNC4wMS4yMC9GQgorCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCisJCisJc3RhdGljIGludCByZWFkREJMZW1tYURhdGEoTGVtbWFJbmZvIGxlbW1hSW5mbywgUHJvcGVydGllcyBwcm9wcykKKwkKKwl7CisJZmluYWwgU3RyaW5nIAorCQlmdW5jID0gInJlYWREQkxlbW1hRGF0YSI7CisKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJdHJ5IHsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0aW5nICclcycuLi5cbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlsZW1tYUluZm8uY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlsZW1tYUluZm8uc3RtdCA9IGxlbW1hSW5mby5jb24uY3JlYXRlU3RhdGVtZW50KCk7CisJCisJCWludCByID0gcmVhZERCTGVtbWEobGVtbWFJbmZvLnN0bXQsIGxlbW1hSW5mbyk7CisJCQkKKwkJaWYoIHIgIT0gMCApCisJCQl7CisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBnZXQgZGF0YSBmb3IgbGVtbWE9JyVzJyBvcHRpb25zPSclcychXG4iLCAKKwkJCQkJZnVuYywgbGVtbWFJbmZvLmxlbW1hLCBsZW1tYUluZm8ub3B0aW9uc3RvU3RyaW5nKCkpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBsZW1tYUluZm8uY29uID09IG51bGwgKQorCQkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjb25uZWN0aW9uIGZhaWxlZCFcbiIsIGZ1bmMpOworCQllbHNlCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNhbm5vdCBjcmVhdGUgc3RtdCFcbiIsIGZ1bmMpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gcmVhZERCTGVtbWFEYXRhCisJCisJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorCSAqIHJlYWREQkxlbW1hCisJICogCisJICogUmVhZHMgd29yZGZvcm1zIGZvciBvbmUgbGVtbWEgYnkgYWNjZXNzaW5nIHRoZSBHbGVtbURCLgorCSAqIElucHV0IDogbGVtbWEgKyBwcm9wMSsyIChsZW1tYXRpemF0aW9uIHJ1bGVzKS4KKwkgKiBPdXRwdXQ6IAorCSAqICAtIGNvbnRhaW5zIGEgUmVzdWx0U2V0IGZvciBmZXRjaGluZyB0aGUgd29yZGZvcm1zLgorCSAqIAkgIFRoaXMgUmVzdWx0U2V0IHdpbGwgaGF2ZSBiZSBiZSBjbG9zZWQgd2l0aCBMZW1tYUluZm8uY2xvc2UoKS4KKwkgKiAJICBUaGUgbm8uIG9mIGZvdW5kIHdvcmRmb3JtcyBpcyBub3Qga25vd24gdGlsbCB3ZQorCSAqIAkgIGZldGNoIGFsbCBvZiB0aGVtIGZyb20gUmVzdWx0U2V0ISAKKwkgKiAJLSBkdWUgdG8gU0VMRUNUIERJU1RJTkNUIG9ubHkgdW5pcSB3ZiBhcmUgcmV0dXJuZWQuCisJICogIAorCSAqIDE0LjAxLjIwL0ZCCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlzdGF0aWMgaW50IHJlYWREQkxlbW1hKFN0YXRlbWVudCBzdG10LCBMZW1tYUluZm8gbGVtbWFJbmZvKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERCTGVtbWEiOworCVN0cmluZworCQlzcWw7CisJCQorCXNxbCA9IFN0cmluZy5mb3JtYXQoIlNFTEVDVCBESVNUSU5DVCB3ZiBmcm9tICVzIFdIRVJFIGxlbW1hPSclcycgJXMgJXMgJXMiLCAKKwkJCWRiVGFibGUsCisJCQlsZW1tYUluZm8ubGVtbWEsCisJCQlsZW1tYUluZm8ucHJvcDEgPT0gMCA/ICJBTkQgcHJvcDE9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AxID09IDEgPyAiQU5EIHByb3AxPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8ucHJvcDIgPT0gMCA/ICJBTkQgcHJvcDI9J2ZhbHNlJyIgOgorCQkJbGVtbWFJbmZvLnByb3AyID09IDEgPyAiQU5EIHByb3AyPSd0cnVlJyIgIDogIiIsCisJCQlsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICJBTkQgc3BlYz0ndHJ1ZSciICAgOiAKKwkJCWxlbW1hSW5mby5zcGVjICA9PSAwID8gIkFORCBzcGVjPSdmYWxzZSciICA6ICIiKTsKKwkKKwkvL1N5c3RlbS5vdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCBmdW5jLCBsZW1tYUluZm8ucHJvcDEsIGxlbW1hSW5mby5wcm9wMiwgbGVtbWFJbmZvLnNwZWMpOworCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogc3FsID0gJyVzJy5cbiIsIGZ1bmMsIHNxbCk7CisKKwl0cnkgeworCQlsZW1tYUluZm8ucmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsJCisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogd2hlbiBleGVjdXRpbmcgc3FsPSclcychXG4iLCBmdW5jLCBzcWwpOworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCWZpbmFsbHkgeworCQkvLyBhbGwgc3FsIHN0dWZmIGFyZSBjbG9zZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLCBzbyBkb24ndCBjbG9zZSB0aGVtIGhlcmUhCisJCX0JCisJCisJcmV0dXJuIDA7IC8vIE9LCisJCisJfSAvLyByZWFkREJMZW1tYQorCQorCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJJbmZvcworCSAqIFJldHVybnMgR2VuZXJhbCBJbmZvcyBhYm91dCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIEdsZW1tIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICogMTUuMTAuMjEvRkIgcmVhZCBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIEdsZW1tREJJbmZvIHJlYWREYkluZm9zKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCWZpbmFsIFN0cmluZyAKKwkJZnVuYyA9ICJyZWFkRGJJbmZvcyI7CisJQ29ubmVjdGlvbiAKKwkJY29uID0gbnVsbDsKKwlTdGF0ZW1lbnQKKwkJc3RtdCA9IG51bGw7CisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwkvLyBsb2FkIEdsZW1tU2VydmljZXMgcHJvcGVydGllcyBhbmQgbG9nIHRoZW0gKHdoZW4gbGFzdCBwYXJhbSA9IHRydWUpOgorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogY29ubmVjdGluZyAnJXMnLi4uXG4iLCBmdW5jLCBkZXJieURCVVJMKTsKKwkJY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRlcmJ5REJVUkwpOworCQlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RlZC5cbiIsIGZ1bmMpOworCQorCQlzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworCQorCQlkYkluZm8gPSByZWFkRGJMZW1tYXRhSW5mb3Moc3RtdCk7CisJCQkKKwkJaWYoIGRiSW5mbyA9PSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IHJlYWQgR2VuZXJhbCBJbmZvcyBmcm9tIEdsZW1tIERhdGFiYXNlIVxuIiwgZnVuYyk7CisJCQl9CisJCX0gCisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CisJCWlmKCBjb24gPT0gbnVsbCApCisJCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3Rpb24gZmFpbGVkIVxuIiwgZnVuYyk7CisJCWVsc2UKKwkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGNyZWF0ZSBzdG10IVxuIiwgZnVuYyk7CisJCWUucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisJCXJldHVybiBudWxsOworCQl9CisJZmluYWxseSB7CisJCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwkJdHJ5IHsKKwkJCWlmKCBjb24gIT0gbnVsbCApIGNvbi5jbG9zZSgpOworCQkJaWYoIHN0bXQgIT0gbnVsbCApIHN0bXQuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0JCQorCQl9CisJCisJcmV0dXJuIGRiSW5mbzsgLy8gbWF5IGJlIG51bGwuCisJCQorCX0gLy8gcmVhZERiSW5mb3MKKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKiByZWFkRGJMZW1tYXRhSW5mb3M6CisJICogcmVhZHMgYW5kIHJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY29udGVudCAKKwkgKiBvZiB0aGUgR2xlbW0gRGF0YWJhc2UuCisJICogUmV0dXJucyAwPU9LIG9yIGVycm9yIGNvZGUgPiAwLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgR2xlbW1EQkluZm8gcmVhZERiTGVtbWF0YUluZm9zKFN0YXRlbWVudCBzdG10KQorCQorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJyZWFkRGJMZW1tYUluZm9zIjsKKwlTdHJpbmdbXQorCQlzcWwgPSB7CSJTRUxFQ1QgQ09VTlQoZGlzdGluY3QgbGVtbWEpIGZyb20gIiArIGRiVGFibGUgLAkvLyBjb3VudHMgbm8uIG9mIGRpc3RpbmN0IGxlbW1hdGEuCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlLAkJCQkJLy8gY291bnRzIHRvdGFsIG5vLiBvZiBzdG9yZWQgd29yZGZvcm1zLgorCQkJCSJTRUxFQ1QgQ09VTlQoKikgZnJvbSAiICsgZGJUYWJsZSArICIgV0hFUkUgcHJvcDE9ZmFsc2UgYW5kIHByb3AyPWZhbHNlIiwKKwkJCQkiU0VMRUNUIENPVU5UKCopIGZyb20gIiArIGRiVGFibGUgKyAiIFdIRVJFIHByb3AxPXRydWUgIGFuZCBwcm9wMj1mYWxzZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT1mYWxzZSBhbmQgcHJvcDI9dHJ1ZSIsCisJCQkJIlNFTEVDVCBDT1VOVCgqKSBmcm9tICIgKyBkYlRhYmxlICsgIiBXSEVSRSBwcm9wMT10cnVlICBhbmQgcHJvcDI9dHJ1ZSJ9OworCVJlc3VsdFNldAorCQlyZXMgPSBudWxsOyAKKwlpbnRbXQorCQluQ291bnRzID0gbmV3IGludFtzcWwubGVuZ3RoXTsKKwlpbnQJCQorCQlpID0gMCwgCisJCW5EaXN0TGVtbWF0YSA9IC0xLAkvLyBuby4gb2YgZGlzdGluY3QgbGVtbWF0YSBpbiBEQi4KKwkJbldmcwkJID0gLTE7CS8vIG5vLiBvZiB3b3JkZm9ybXMgaW4gREIuCisJR2xlbW1EQkluZm8KKwkJZGJJbmZvID0gbnVsbDsKKwkKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGV4dHJhY3RpbmcgYWdyZWdhdGVkIGluZm9zIGFib3V0IERhdGFiYXNlIGNvbnRlbnRzLi4uXG4iLCBmdW5jKTsKKwkKKwlkYkluZm8gPSBuZXcgR2xlbW1EQkluZm8oKTsKKworCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCXRyeSB7CisJCWZvcihpPTA7IGk8c3FsLmxlbmd0aDsgaSsrKQorCQkJeworCQkJcmVzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsW2ldKTsKKwkJCWlmKCByZXMubmV4dCgpICkKKwkJCQlkYkluZm8uY291bnRzW2ldID0gcmVzLmdldEludCgxKTsgLy8gY291bnQgaXMgaW4gY29sdW1uIDEuCisJCQllbHNlCisJCQkJeworCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiAlczogY2Fubm90IGV4dHJhY3QgY291bnQgZnJvbSAnJXMnIVxuIiwgZnVuYywgc3FsW2ldKTsKKwkJCQlkYkluZm8uY291bnRzW2ldID0gLTE7CisJCQkJfQorCQkJfQorICAgICAgIAorICAgICAgICB9CisgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgCXsKKyAgICAJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBzcWw9JyVzJyBmYWlsZWQhXG4iLCBmdW5jLCBzcWxbaV0pOworICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIAl9CisJZmluYWxseSB7CisJCXRyeSB7CisJCQlyZXMuY2xvc2UoKTsKKwkJCX0gCisJCWNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJCX0KKwkJfQorCQorCXJldHVybiBkYkluZm87IC8vIE9LCisJfSAvLyByZWFkRGJMZW1tYXRhSW5mb3MKKwkKKwkvKioqKioqKioqKioqKioqKioqKiogVGVzdCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkKKwkvKiAqICogKiAqICogKiAqICogKiAqCisJICogcmVhZERiSW5mb3NfdGVzdAorCSAqIFRoaXMgaXMgZGVidWcgY29kZSB3cml0dGVuIHRvIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgRGVyYnkKKwkgKiBEYXRhYmFzZSBmcm9tIGFuIGV4dGVybmFsIEphdmEgUHJvZ3JhbW0uCisJICogMDguMDEuMjAvRkIKKwkgKiAqICogKiAqICogKiAqICogKiAqLworCQorCXB1YmxpYyBzdGF0aWMgaW50IHJlYWREYkluZm9zX3Rlc3QoKQorCQorCXsKKwlmaW5hbCBTdHJpbmcgCisJCWZ1bmMgPSAicmVhZERiSW5mb3MiOworCUNvbm5lY3Rpb24gCisJCWNvbiA9IG51bGw7CisJU3RhdGVtZW50CisJCXN0bXQgPSBudWxsOworCVN0cmluZworCQlpbnNlcnRTdG10ID0gIiI7CisJCisJLy8gQ29ubmVjdCB0byBEZXJieSBkYXRhYmFzZToKKwlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGNvbm5lY3RpbmcgJyVzJy4uLlxuIiwgZnVuYywgZGVyYnlEQlVSTCk7CisJCisJLy8gb3BlbiBDb25uZWN0aW9uIHRvIERlcmJ5IERhdGFiYXNlOgorCXRyeSB7CisJCWNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbihkZXJieURCVVJMKTsKKwkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiBjb25uZWN0ZWQuXG4iLCBmdW5jKTsKKwkJCisJCS8vIGV4dHJhY3QgREIgaW5mb3MgYW5kIHJldHVybiB0aGVtOgorCQl0cnkKKwkJCXsKKwkJCXN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTdHJpbmcgCisgICAgICAgICAgICAJc3FsID0gIlNFTEVDVCAqIEZST00gIiArIGRiVGFibGU7CisgICAgICAgICAgICBSZXN1bHRTZXQgCisgICAgICAgICAgICAJcmVzdWx0ID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsKKyAKKyAgICAgICAgICAgIEdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiAlczogdGFibGUgJyVzJzpcbiIsICBmdW5jLCBkYlRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIAlHbGVtbVNlcnZpY2VzLmZvdXQucHJpbnRmKCInJXMnIDogJyVzJyA6ICclcycgOiAnJXMnIC5cbiIsIHJlc3VsdC5nZXRTdHJpbmcoMSksCisgICAgICAgICAgICAgICAgCQlyZXN1bHQuZ2V0U3RyaW5nKDIpLAorICAgICAgICAgICAgICAgIAkJcmVzdWx0LmdldFN0cmluZygzKSwKKyAgICAgICAgICAgICAgICAJCXJlc3VsdC5nZXRTdHJpbmcoNCkpOworICAgICAgICAJCWluc2VydFN0bXQgPSBpbnNlcnRTdG10ICsgIjxwPiIgKyByZXN1bHQuZ2V0U3RyaW5nKDEpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDIpICsgIiA6ICIgKworICAgICAgICAgICAgICAgIAkJICAgICByZXN1bHQuZ2V0U3RyaW5nKDMpICsgIiA6ICIgKyByZXN1bHQuZ2V0U3RyaW5nKDQpICsgIjwvcD4iOworICAgICAgICAgICAgCX0KKwkJCX0KKwkgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWxFeGNlcHQpCisgICAgICAgIAl7CisJICAgIAlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGluc2VydFN0bXQ9JyVzJyBmYWlsZWQhLlxuIiwgZnVuYywgc3RtdCk7CisgICAgICAgICAgICBzcWxFeGNlcHQucHJpbnRTdGFja1RyYWNlKEdsZW1tU2VydmljZXMuZmVycik7CisgICAgICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAJfQorCQl9CisJY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAKKwkJeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlHbGVtbVNlcnZpY2VzLmZlcnIucHJpbnRmKCJFcnJvcjogJXM6IGNvbm5lY3RpbmcgJyVzIGZhaWxlZCFcbiIsIGZ1bmMsIGRlcmJ5REJVUkwpOworCQlyZXR1cm4gMTsKKwkJfQorCQorCS8vIGNsb3NpbmcgY29ubmVjdGlvbjoKKwl0cnkgeworCQljb24uY2xvc2UoKTsKKwkJfSAKKwljYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJfQorCQorCXJldHVybiAwOyAvLyBPSworCQkKKwl9IC8vIHJlYWREYkluZm9zX3Rlc3QKKworCS8qICogKiAqICogKiAqICogKiAqICoKKwkgKiBpbXBvcnRHbGVtbUxlbWF0YV90ZXN0CisJICogVGVzdCBWZXJzaW9uLgorCSAqIDEyLjEyLjE5L0ZCCisJICogKiAqICogKiAqICogKiAqICogKi8KKwkKKwlwdWJsaWMgc3RhdGljIGludCBpbXBvcnRHbGVtbUxlbW1hdGFfdGVzdChTdHJpbmcgZm4pCisJCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImltcG9ydEdsZW1tTGVtbWF0YV90ZXN0IjsKKwlJbnB1dFN0cmVhbSAKKwkJaW47CisJQnVmZmVyZWRSZWFkZXIKKwkJaW4yID0gbnVsbDsKKwlTdHJpbmcKKwkJbGluZTsKKwlTdHJpbmdbXQorCQlsZW1tYUluZm87CisJaW50CisJCXI7CisJCisJLyoKKwkgKiBSZWFkIExlbW1hdGEgKyBJbmZvIGZyb20gZmlsZTogCisJICovCisJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6ICVzOiByZWFkaW5nIGZyb20gJyVzJy5cbiIsIGZ1bmMsIGZuKTsKKwkJCisJdHJ5IHsKKwkJLy9pbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBuZXcgRmlsZUlucHV0U3RyZWFtKGZuKSApOworCQlpbjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZuKSk7CisJCXdoaWxlKCAobGluZSA9IGluMi5yZWFkTGluZSgpKSAhPSBudWxsICkKKwkJCXsKKwkJCUdsZW1tU2VydmljZXMuZm91dC5wcmludGYoIkRlYnVnOiBpbXBvcnQ6ICclcycuXG4iLCBsaW5lKTsKKwkJCWxlbW1hSW5mbyA9IGxpbmUuc3BsaXQoIlxccyIpOworCQkJaWYoIGxlbW1hSW5mby5sZW5ndGggPT0gMyApCisJCQkJR2xlbW1TZXJ2aWNlcy5mb3V0LnByaW50ZigiRGVidWc6IEltcG9ydDogbGVtPSclcycgRGVjb21wPSclcycgV2Y9JyVzJy5cbiIsIGxlbW1hSW5mb1swXSwgbGVtbWFJbmZvWzFdLCBsZW1tYUluZm9bMl0pOworCQkJZWxzZQorCQkJCUdsZW1tU2VydmljZXMuZmVyci5wcmludGYoIkVycm9yOiBpbXBvcnRHbGVtbUxhbWF0YTogJyVzJyBoYXMgJWQgY29tcG9uZW50cyFcbiIsIGxpbmUsIGxlbW1hSW5mby5sZW5ndGgpOworCQkJfQorCQl9IAorCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoR2xlbW1TZXJ2aWNlcy5mZXJyKTsKKwkJR2xlbW1TZXJ2aWNlcy5mZXJyLnByaW50ZigiRXJyb3I6ICVzOiBjYW5ub3Qgb3BlbiAnJXMnIVxuIiwgZnVuYywgZm4pOworCQlyZXR1cm4gMTsKKwkJfSAKKwljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQlyZXR1cm4gMTsKKwkJfQorCisJdHJ5IHsKKwkJaW4yLmNsb3NlKCk7CisJCX0gCisJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQllLnByaW50U3RhY2tUcmFjZShHbGVtbVNlcnZpY2VzLmZlcnIpOworCQl9CisJCisJLyogQ2hlY2sgY29ubmVjdGlvbiB0byBEZXJieSBEYXRhYmFzZToKKwkgKi8gCisJciA9IHJlYWREYkluZm9zX3Rlc3QoKTsKKwlpZiggciAhPSAwICkKKwkJcmV0dXJuIHI7CisJCQorCXJldHVybiAwOyAvLyBPSworCQorCX0gLy8gaW1wb3J0R2xlbW1MZW1tYXRhX3Rlc3QKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLmhpc3RvcnkvZjgvZTAxNjllNzQ0ODNkMDAxYzEwYjFiMTdkZGQzMDllNmYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y4L2UwMTY5ZTc0NDgzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTBiODEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5oaXN0b3J5L2Y4L2UwMTY5ZTc0NDgzZDAwMWMxMGIxYjE3ZGRkMzA5ZTZmCkBAIC0wLDAgKzEsOTY5IEBACitwYWNrYWdlIGRlLmtvcmFwLnNlcnZpY2VzOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZVN5c3RlbXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkRlZmF1bHRWYWx1ZTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5RdWVyeVBhcmFtOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQ29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworCitpbXBvcnQgZGUua29yYXAuc2VydmljZXMudXRpbHMuVXRpbHM7CisKKy8qIDAuMSA6IDE3LjA2LjIwL0ZCIAorICogMC4yIDogMjUuMTAuMjEvRkIKKyAqICAgICAgIGxvZ2luZyBvZiB0aGUgQVBJIFJlcXVlc3RzLgorICogICAgICAgbG9hZGluZyBjb25zdGFudHMgZnJvbSBHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMuCisgKiAgICAgICBjb3JyZWN0aW5nIGNhbGxpbmcgb2YgbGVtbWEgKyBwcm9wMS9wcm9wMi9zcGVjLgorICogICAgICAgaGFuZGxpbmcgb2YgbGVtbWF0YSB3aXRoICfDnycuCisgKiAKKyAqIEdlbmVyYWwgY29tbWVudHMgdG8gdGhlIGVuY29kaW5nIG9mIGRlcml2YXRpb25zIGZyb20gbGVtbWEgdG8gd2ZzIGFuZCBob3cgdGhleSBhcmUgZW5jb2RlZAorICogaW4gdGhlIERlcmJ5IGRhdGFiYXNlOgorICogCisgKiBHTEVNTSBlbmNvZGluZzogIAorICogICBfIF8gOiArRmxleCAgICAgICDDlmxlIC0+IMOWbCAgICAgIAorICogICArIF8gOiArQ29tcCAgICAgICDDlmxsYW1wZSAtPiDDlmwgb3IgTGFtcGUgKGNvbXBvdW5kKS4KKyAqICAgXyArIDogK290aGVyICAgICAgQW50aXR1cm5zY2h1aCAtPiBBbnRpLSArIFR1cm5zY2h1aCAobm8gY29tcG91bmQgZm9yICdUdXJuc2NodWgnLCBvbmx5IHByZWZpeCkuCisgKiAgICsgKyA6ICtDb21wK290aGVyIEFudGl0dXJuc2NodWggLT4gQW50aS0gKyBUdXJuICsgU2NodWggKGNvbXBvdW5kIGZvciAnU2NodWgnICsgUHJlZml4KS4KKyAqIEMyIGxlbW1hdGl6YXRpb24gb3B0aW9uczoKKyAqICAgRmxleCAgKGlkZW50aWNhbCB0byBHbGVtbSkKKyAqICAgQ29tcCAgKGlkZW50aWNhbCB0byBHbGVtbSwgaW5jbHVkZXMgYWxsIEZsZXhpb25zKQorICogICBPdGhlciAoaWRlbnRpY2FsIHRvIEdsZW1tLCBpbmNsdWRlcyBhbGwgRmxleGlvbnMpLgorICogICBTcGVjICAob25seSBDMjogaW5jbHVkZXMgYWxsIHdmcyB3aXRoIGhpcGhlbiBhbmQvb3Igc29tZSBub24tYWxwaGFiZXRpYyBJU084ODU5LTEgY2hhcnMpCisgKiAgICAgICAgIEUuZy4gw5ZsLUV4cG9ydGUsICJNYXJrZW4iLcOWbGUuCisgKiBEZXJieSBFbmNvZGluZzoKKyAqICBwcm9wMSAJcHJvcDIJc3BlYyAgIAltZWFuaW5nIGluIEMyOgorICogIDAJCTAJCS0JCUZsZXgKKyAqICAxCQkwCQktCQlDb21wCisgKiAgMAkJMQkJLQkJT3RoZXIgKHByZWZpeCkKKyAqICAxCQkxCQktCQlDb21wICsgT3RoZXIKKyAqICAtCQktCQkwCQktU3BlYworICogIC0JCS0JCTEJCStTcGVjCisgKiAKKyAqIEV4YW1wbGVzOgorICogJlNjaHVoCQkJOiBTY2h1aCwgU2NodWhlLCAuLi4gb25seSBmbGV4aW9ucworICogJlNjaHVoK2NvbXAJCTogU2NodWhlLCBUdXJuc2NodWhlLi4uIGZsZXhpb25zIGFuZCBjb21wb3VuZHMuCisgKiAmU2NodWgrb3RoZXIJCTogU2NodWhlLCBBbnRpc2NodWhlLi4uIGZsZXhpb25zIGFuZCBwcmVmaXhlZCB3ZnMgKG5vIGNvbXBvdW5kcykuCisgKiAmU2NodWgrY29tcCtvdGhlcjogU2NodWhlLCBBbnRpc2NodWhlLCBUdXJuc2NodWhlLCBBbnRpdHVybnNjaHVoZS4uLiBmbGV4aW9ucyBhbmQgY29tcG91bmRzIGFuZCAKKyAqIAkJCQkJICBwcmVmaXhlZCBzaW5nbGUgd2ZzIChBbnRpc2NodWhlKSBhbmQgcHJlZml4ZWQgY29tcG91bmRzLgorICogJlNjaHVoK3NwZWMJCTogIkFudGkiLVNjaHVoZSwgNjhnZXItU2NodWhlLi4uIG1heSBiZSBjb21iaW5lZCB3aXRoIGV2ZXJ5IG9wdGlvbnM6IGFkZHMKKyAqICAgICAgICAgICAgICAgICAgICB3ZnMgd2l0aCBoeXBoZW4gYW5kL29yIG5vbi1hbHBoYWJldGljIGNoYXJzLgorICogCisgKiBDb252ZXJzaW9uIHJ1bGVzOgorICogCisgKiAgJnNjaGxpZcOfZW4gLT4gaW50ZXJuYWwgc2VhcmNoIGZvciAnc2NobGllc3NlbicsCisgKiAgYmVjYXVzZSBHbGVtbSBvdXRwdXRzICdzcycgZm9yICfDnycuCisgKiAgCisgKiBDaGFyYWN0ZXIgRW5jb2Rpbmc6CisgKiAKKyAqIC0gV2hlbiBpbXBvcnRpbmcgd2ZzIHRvIHRoZSBEZXJieSBEYXRhYmFzZSB3aXRoIGRvQ3VybEdsZW1tU2VydmljZXMvaW5kZXhMZW1tYXRhOgorICogCisgKiAgIElOUFVUOiB3b3JkZm9ybSBsaXN0IGluIFtVVEYtOF0gOiBVVEYtOCBpcyB0aGVuIGNvbnZlcnRlZCB0byBMYXQxIGZvciBHbGVtbSwKKyAqICAgICAgICAgIHRoZSBvdXRwdXQgb2YgR2xlbW0gW0xhdDFdIGlzIHJldHVybmVkIHRvIHRoZSBHbGVtbVNlcnZpY2VzIHdpdGhvdXQgcmVjb252ZXJzaW9uCisgKiAgICAgICAgICB0byBVVEY4IGFuZCBpbXBvcnRlZCBpbnRvIERlcmJ5IERhdGFiYXNlIHVuY2hhbmdlZC4KKyAqCQkKKyAqLworCitAUGF0aCgiL2luZGV4IikKKworcHVibGljIGNsYXNzIEdsZW1tU2VydmljZXMgeworCQorCWZpbmFsIHByaXZhdGUgU3RyaW5nIHZlcnNpb25EYXRlCT0gIjA0LjExLjIxIjsgCisJZmluYWwgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbgkJPSAiMC4yIjsKKwkKKwlmaW5hbCBwcml2YXRlIFN0cmluZyBmbmFtZVByb3BzCQk9ICIvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiOworCQorCS8vIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWFkIGZyb20gR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzICh0aGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzKToKKwlwcml2YXRlIFN0cmluZyBHU19Xb3JraW5nUGF0aCAJCT0gIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL1Rlc3RzIjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZVdmcyAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9nbF93ZnNfaW4udHh0IjsKKwlwcml2YXRlIFN0cmluZyBmbmFtZU91dCAJCQk9IEdTX1dvcmtpbmdQYXRoICsgIi9HbGVtbVNlcnZpY2VzLmxvZyI7CisJcHJpdmF0ZSBTdHJpbmcgZm5hbWVFcnIgCQkJPSBHU19Xb3JraW5nUGF0aCArICIvR2xlbW1TZXJ2aWNlcy5lcnIiOworCXByaXZhdGUgU3RyaW5nIGZuYW1lU2NyaXB0IAkJCT0gR1NfV29ya2luZ1BhdGggKyAiL2RvR2xlbW0iOworCXByaXZhdGUgU3RyaW5nIGZuYW1lTGVtYXRhCQkJPSBHU19Xb3JraW5nUGF0aCArICIvdG1wL2xlbTMudXRmOCI7CisKKwlAQ29udGV4dAorCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGh0dHBTZXJ2bGV0UmVxdWVzdDsKKwlAQ29udGV4dAorCXByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisJCisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9URVhUIAk9IDE7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9KU09OCQk9IDI7CisJZmluYWwgcHJpdmF0ZSBpbnQJQUNDX0ZPUk1BVF9IVE1MCQk9IDM7CisJCisJcHVibGljIHN0YXRpYyBQcmludFN0cmVhbSBmb3V0CT0gbnVsbDsKKwlwdWJsaWMgc3RhdGljIFByaW50U3RyZWFtIGZlcnIJPSBudWxsOwkJCisJCQorCS8qIAorIAkgKiAKKwkgKiAtIGFmdGVyIGxvYWRQcm9wZXJ0aWVzLCBzZXRzIHRoZSBjbGFzcyB2YXJpYWJsZSB3aXRoIGxvYWRlZCBwcm9wZXJ0eSB2YWx1ZXMuCisJICogCisJICogMTUuMTAuMjEvRkIKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc2V0X0NvbnN0YW50c0Zyb21Qcm9wZXJ0aWVzKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCUdTX1dvcmtpbmdQYXRoIAk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJHU19Xb3JraW5nUGF0aCIsICIvaG9tZS9ib2RtZXIvS29yQVAvR2xlbW1TZXJ2aWNlcy9UZXN0cyIpOworCWZuYW1lV2ZzCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZVdmcyIsIAkgICAiZ2xfd2ZzX2luLnR4dCIpOworCWZuYW1lV2ZzCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVXZnM7CisJZm5hbWVPdXQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lT3V0IiwgCSAgICJHbGVtbVNlcnZpY2VzLmxvZyIpOworCWZuYW1lT3V0CQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVPdXQ7CisJZm5hbWVFcnIJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lRXJyIiwgCSAgICJHbGVtbVNlcnZpY2VzLmVyciIpOworCWZuYW1lRXJyCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVFcnI7CisJZm5hbWVTY3JpcHQJCT0gVXRpbHMuZ2V0Q29uc3RhbnRGcm9tUHJvcGVydGllcyhwcm9wcywgImZuYW1lU2NyaXB0IiwJICAgImRvR2xlbW0iKTsKKwlmbmFtZVNjcmlwdAkJPSBHU19Xb3JraW5nUGF0aCArICIvIiArIGZuYW1lU2NyaXB0OworCWZuYW1lTGVtYXRhCQk9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZUxlbWF0YSIsICAgICJ0bXAvbGVtMyIpOworCWZuYW1lTGVtYXRhCQk9IEdTX1dvcmtpbmdQYXRoICsgIi8iICsgZm5hbWVMZW1hdGE7CisJfSAvLyBzZXRfQ29uc3RhbnRzRnJvbVByb3BlcnRpZXMKKwkKKwkvKgorCSAqICBsb2dfUmVxdWVzdDoKKwkgKiAgCisJICogIC0gd3JpdGUgaW5mbyBhYm91dCBBUEkgUmVxdWVzdC4KKwkgKiAgUGFyYW1ldGVyczoKKwkgKiAgcmVxdWVzdFBhdGgJOiBwYXRoIG9mIHdlYmFwcCBhZGRyZXNzZWQgYnkgdGhlIHJlcXVlc3QuCisJICogIGZ1bmMJCTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVxdWVzdC4KKwkgKiAgCisJICogIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGxvZ19SZXF1ZXN0KFN0cmluZyByZXF1ZXN0UGF0aCwgU3RyaW5nIGZ1bmMpCisJCisJeworCS8vIHRyYW5zZm9ybSAiZGF0ZVR0aW1lIiAtPiAiZGF0ZSB0aW1lIjoKKwkKKwlmb3V0LnByaW50ZigiIyMjXG4iKTsKKwlmb3V0LnByaW50ZigiIyMjICVzOiAlcyA6IHZlcnM9JyVzJywgdmRhdGU9JyVzJyByZXF1ZXN0PSclcycuXG4iLCBmdW5jLCByZXF1ZXN0UGF0aCwgdmVyc2lvbiwgdmVyc2lvbkRhdGUsIAorCQkJCQkJTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSk7CisJZm91dC5wcmludGYoIiMjI1xuIik7CisJfSAvLyBsb2dfUmVxdWVzdAorCQkKKwkvKiBmb3JtYXREYk5hbWUKKwkgKiAKKwkgKiAtIGdldHMgbmFtZSBvZiBEYXRhYmFzZSB1c2VkIGJ5IERlcmJ5IGZyb20gcHJvcHMgCisJICogICBhbmQgZm9ybWF0IGl0IHRvIEhUTUwuCisJICogIAorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RGJOYW1lKFByb3BlcnRpZXMgcHJvcHMpCisJCisJeworCVN0cmluZworCQlkYk5hbWU7CisJU3RyaW5nCisJCWRiUGF0aCA9IFV0aWxzLmdldENvbnN0YW50RnJvbVByb3BlcnRpZXMocHJvcHMsICJmbmFtZURCIiwgIi9ob21lL2JvZG1lci9Lb3JBUC9HbGVtbVNlcnZpY2VzL0Ricy9EZXJieVRlc3REQiIpOworCWludAorCQlqID0gZGJQYXRoLmxhc3RJbmRleE9mKCcvJyk7CisJCisJaWYoIGogPiAwICkKKwkJZGJOYW1lID0gZGJQYXRoLnN1YnN0cmluZyhqKzEpOworCWVsc2UKKwkJZGJOYW1lID0gZGJQYXRoOworCQorCXJldHVybiBkYk5hbWU7IC8vICI8cD48Yj5EYXRhYmFzZTogIiArIGRiTmFtZSArICI8L2I+PC9wPlxuIjsKKwl9IC8vIGZvcm1hdERiTmFtZQorCisJLyoKKwkgKiBjbG9zZUxvZ1N0cmVhbXM6CisJICogCisJICogLSBjbG9zZSB0aGUgZm91dC9mZXJyIGxvZyBzdHJlYW1zLgorCSAqIAorCSAqIDI2LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNsb3NlTG9nU3RyZWFtcygpCisJCisJeworCWlmKCBmb3V0ICE9IG51bGwpCisJCWZvdXQuY2xvc2UoKTsKKwlmb3V0ID0gbnVsbDsKKwkKKwlpZiggZmVyciAhPSBudWxsICkKKwkJZmVyci5jbG9zZSgpOworCWZlcnIgPSBudWxsOworCX0gLy8gY2xvc2VMb2dTdHJlYW1zCisJCisJLyogaW5pdF9hbmRfbG9nX1JlcXVlc3QKKwkgKiAKKwkgKiAtIGxvYWQgR2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzLCBzZXRzIEdsZW1tU2VydmljZXMgY29uc3RhbnRzCisJICogICBhbmQgbG9ncyB0aGUgcmVxdWVzdC4KKwkgKiAtIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IGNvbnN0YW50cyBiZWZvcmUgbG9nZ2luZyBhbnl0aGluZywgYmVjYXVzZQorCSAqICAgbG9nZ2luZyB3aWxsIGJlIGRvbmUgaW50byB0aGUgbGFzdCBzdGRvdXQvc3RkZXJyIG9wZW5lZCBpbiBnbGFzc2Zpc2gncyBKVk0sCisJICogICBlLmcuIGluIHRoZSBsb2cgb2YgYW5vdGhlciBTZXJ2aWNlLgorCSAqIDE5LjEwLjIxL0ZCCisJICovCisJCisJcHJpdmF0ZSBQcm9wZXJ0aWVzIGluaXRfYW5kX2xvZ19SZXF1ZXN0KFN0cmluZyBmdW5jLCBTdHJpbmcgcmVxdWVzdFBhdGgpCisJCisJeworCVN0cmluZworCQlyZWFsUGF0aCA9IHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKGZuYW1lUHJvcHMpOworCQorCS8vIGxvYWQgR2xlbW1TZXJ2aWNlcyBwcm9wZXJ0aWVzIGFuZCBsb2cgdGhlbSAoaWYgbGFzdCBwYXJhbSA9IHRydWUpOgorCVByb3BlcnRpZXMKKwkJcHJvcHMgPSBVdGlscy5sb2FkUHJvcGVydGllcyhzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZUFzU3RyZWFtKGZuYW1lUHJvcHMpLCBmbmFtZVByb3BzLCByZWFsUGF0aCwgZmFsc2UpOworCQorCXNldF9Db25zdGFudHNGcm9tUHJvcGVydGllcyhwcm9wcyk7CisJCisJLy8gb3BlbiBmb3V0IGFuZCBmZXJyIGFzIHJlcGxhY2VtZW50IGZvciBzdGRvdXQvc3RkZXJyIGZvciB1c2UgaW4gR2xlbW1TZXJ2aWNlcy4KKwkvLyBkbyBub3QgdXNlIG9yIHJlZGlyZWN0IFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIsIGFzIHRoZXkgd2lsbCBiZSByZWRpcmVjdGVkCisJLy8gYnkgb3RoZXIgU2VydmljZXMgaW4gdGhlIHNhbWUgZ2xhc3NmaXNoIEpWTSwgZS5nLiBieSB0aGUgV2Zvcm1TZXJ2aWNlcy4KKwlmb3V0ID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lT3V0KTsKKwlmZXJyID0gVXRpbHMuc2V0TG9nU3RyZWFtKGZuYW1lRXJyKTsKKwkKKwkvL1V0aWxzLnNldFN0ZEZpbGVTdHJlYW1zKGZuYW1lRXJyLCBmbmFtZU91dCk7CisJCisJbG9nX1JlcXVlc3QocmVxdWVzdFBhdGgsIGZ1bmMpOworCQorCXJldHVybiBwcm9wczsKKwl9IC8vIGluaXRfYW5kX2xvZ19SZXF1ZXN0CisKKwkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisJICogCisJICogZG9HRVRfc3RhdHVzKCkgb24gL2luZGV4L3N0YXR1cy4KKwkgKiAKKwkgKiBHRVQgc3RhdHVzIG9mIEdsZW1tIFNlcnZpY2VzCisJICogCisJICogMTcuMDYuMjAvRkIKKwkgKiAKKwkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKwkgKi8KKwkKKwlAUGF0aCgic3RhdHVzIikKKwlAR0VUCisJQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCQorCXB1YmxpYyBTdHJpbmcgZG9HRVRfc3RhdHVzKCkgCisJCisJeworCWZpbmFsIFN0cmluZyBmdW5jID0gImRvR0VUX3N0YXR1cyI7CisJU3RyaW5nCisJCXN0YXR1czsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCQorCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9zdGF0dXMvIik7CisJCisJLy8gaHR0cFNlcnZsZXRSZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVudik7CisJCisJc3RhdHVzID0gU3RyaW5nLmZvcm1hdCgJIjxodG1sPlxuIiArCisJCQkJCQkgICAJIiA8aDM+R2xlbW0gU2VydmljZXM8L2gzPlxuIiArCisJCQkJCQkgICAJIiA8cD48Yj5WZXJzaW9uPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+VmVyc2lvbiBkYXRlPC9iPiA6ICVzPC9wPiIgKworCQkJCQkJCSIgPHA+PGI+c3RhdHVzPC9iPiAgOiByZWFkeS48L3A+IiArCisJCQkJCQkJIiA8cD48Yj5SZXF1ZXN0IHRpbWU8L2I+OiAlczwvcD4iICsKKwkJCQkJCQkiIDxwPjxiPnByb3BlcnRpZXM8L2I+OiAlcyA8L3A+IiArCisJCQkJCQkJIiA8cD48Yj5kYXRhYmFzZTwvYj46ICVzIDwvcD4iICsKKwkJCQkJCQkiPC9odG1sPiIsCisJCQkJCQkJdmVyc2lvbiwKKwkJCQkJCQl2ZXJzaW9uRGF0ZSwKKwkJCQkJCQlMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpLAorCQkJCQkJCXNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlQXNTdHJlYW0oZm5hbWVQcm9wcykgPT0gbnVsbCA/ICJub3QgZm91bmQiIDoKKwkJCQkJCQkJcHJvcHMuaXNFbXB0eSgpID8gImVtcHR5IiA6ICJsb2FkZWQiLAorCQkJCQkJCWZvcm1hdERiTmFtZShwcm9wcykKKwkJCQkJCQkpOworCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogZG9uZS5cbiIsIGZ1bmMpOworCWNsb3NlTG9nU3RyZWFtcygpOworCXJldHVybiBzdGF0dXM7CQorCQkKKwl9IC8vIGRvR0VUX3N0YXR1cworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogCisJICogZG9QT1NUX2ltcG9ydExlbW1hRGF0YToKKwkgKiAKKwkgKiBQT1NUOiAvaW5kZXgvYWRkLzogdGV4dC9wbGFpbgorCSAqIGFkZHMgYSBsaXN0IG9mIG5ldyB3b3JkZm9ybXMgdG8gdGhlIEdsZW1tU2VydmljZSdzIERhdGFiYXNlLgorCSAqIFRoZSB3ZnMgYXJlIGxlbW1hdGl6ZWQgYW5kIHRoZSBtb3JwaG9sb2dpY2FsIGRhdGEgc3RvcmVkCisJICogaW50byB0aGUgZGF0YWJhc2UuCisJICogSW5wdXQ6IHdvcmRmb3JtIGRhdGEgZXhwZWN0ZWQgaW4gW1VURi04XS4KKwkgKiAyNS4xMS4xOS9GQgorCSAqLworCQorCUBQYXRoKCJhZGQve2RhdGFiYXNlbmFtZX0iKSAKKwlAUE9TVCAKKwlAQ29uc3VtZXMoInRleHQvcGxhaW4iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9QT1NUX2ltcG9ydExlbW1hRGF0YQorCQkJCQkJCSgKKwkJCQkJCQlTdHJpbmcgCQkJCQkJCQlsaXN0LAorCQkJCQkJCUBQYXRoUGFyYW0odmFsdWU9ImRhdGFiYXNlbmFtZSIpIAlmaW5hbCBTdHJpbmcgZGJuYW1lCisJCQkJCQkJKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvUE9TVF9pbXBvcnRMZW1tYURhdGEiOworCVN0cmluZ1tdIGFyTGlzdCA9IGxpc3Quc3BsaXQoIlxuIik7CisJCisJRmlsZVN5c3RlbSAKKwkJZnMgPSBGaWxlU3lzdGVtcy5nZXREZWZhdWx0KCk7CisJamF2YS5uaW8uZmlsZS5QYXRoCisJCXAgPSBmcy5nZXRQYXRoKGZuYW1lV2ZzKTsKKwlPdXRwdXRTdHJlYW0gCisJCW9zOworCWJvb2xlYW4KKwkJYkRvbmUgPSBmYWxzZTsKKwlTdHJpbmcKKwkJbXNnOworCWludAorCQluRXJyb3JzID0gMDsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L2FkZC8iKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBzdWJtaXR0ZWQgZGF0YWJhc2VuYW1lPSclcycuXG4iLCBmdW5jLCBkYm5hbWUpOworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHBvc3RlZCBsaXN0ID0gJyVzJy5cbiIsIGZ1bmMsIGxpc3QpOworCQorCS8vIFdyaXRlIHN1Ym1pdHRlZCBsaXN0IG9mIHdvcmRmb3JtcyB0byBmaWxlOgorCXRyeQorCQl7CisJCW9zID0gRmlsZXMubmV3T3V0cHV0U3RyZWFtKHApOworCQlvcy53cml0ZShsaXN0LmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSkpOworCSAgICBvcy5jbG9zZSgpOworCSAgICBiRG9uZSA9IHRydWU7CisJICAgIGZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGZpbGUgJyVzJyBiZXNjaHJpZWJlbi5cbiIsIGZ1bmMsIGZuYW1lV2ZzKTsKKwkgICAgfQorCWNhdGNoKElPRXhjZXB0aW9uIGUpCisJCXsKKwkJZS5wcmludFN0YWNrVHJhY2UoZmVycik7CisJCX0KKyAgICAKKwlpZiggYkRvbmUgKQorCQltc2cgPSAiPHA+TGlzdCB3cml0dGVuIHRvIGZpbGU6ICIgKyBwLnRvU3RyaW5nKCkgKyAiPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+PGI+RmlsZSBFcnJvcjogPC9iPiBjYW5ub3Qgd3JpdGUgdG8gIiArIHAudG9TdHJpbmcoKSArICIhPC9wPiI7CisJCisJLyoKKwkgKiAgZXhlY3V0ZSBHbGVtbSBzaGVsbCBzY3JpcHQ6CisJICovCisJU3RyaW5nCisJCW1zZ0dsZW1tU2NyaXB0LCBtc2dJbXBvcnQ7CisJaW50IAorCQlyID0gVXRpbHMuZXhlY3V0ZVNoZWxsU2NyaXB0KGZuYW1lU2NyaXB0LCBmbmFtZVdmcywgZm91dCwgZmVycik7CisJCisJaWYoIHIgPT0gMCApCisJCW1zZ0dsZW1tU2NyaXB0ID0gIjxwPjxiPkdsZW1tIFNjcmlwdDo8L2I+IEF1c2bDvGhydW5nIE9LLjwvcD4iOworCWVsc2UKKwkJbXNnR2xlbW1TY3JpcHQgPSAiPHA+PGI+R2xlbW0gU2NyaXB0OjwvYj4gRmVobGVyIGF1ZmdldHJldGVuISI7CisJCisJLy8gQnVpbGQgYSByZXBvbnNlIGFuZCByZXR1cm4gaXQ6CisJaWYoIHIgIT0gMCApCisJCXJldHVybiAKKwkJICAgIjxodG1sPiIgKworCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCSAgICI8cD5WZXJzaW9uIHZvbSAiICsgdmVyc2lvbkRhdGUgKyAiPC9wPiIgKworCQkgICAiPHA+Q29uc3VtZXMgPSB0ZXh0L3BsYWluPC9wPiIgKworCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJICAgbXNnICsgbXNnR2xlbW1TY3JpcHQgKworCQkgICAiPC9odG1sPiI7IAorCQorCQorCS8vIFJlYWQgbGVtbWF0aXplZCBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gZGF0YWJhc2U6CisJbkVycm9ycyA9IEdsZW1tREIuaW1wb3J0R2xlbW1MZW1tYXRhKGZuYW1lTGVtYXRhLCBwcm9wcyk7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogaW1wb3J0R2xlbW1MZW1tYXRhIHJldHVybnMgcj0lZC5cbiIsIGZ1bmMsIHIpOworCWlmKCBuRXJyb3JzID09IDAgKQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogT0suPC9wPiI7CisJZWxzZQorCQltc2dJbXBvcnQgPSAiPHA+PGI+SW1wb3J0OjwvYj4gIiArIGZuYW1lTGVtYXRhICsgIjogIiArIG5FcnJvcnMgKyAiIGVycm9ycyE8L3A+IjsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBlbmRpbmcgdGltZTogJXMuXG4iLCBmdW5jLCBMb2NhbERhdGVUaW1lLm5vdygpLnRvU3RyaW5nKCkucmVwbGFjZSgiVCIsICAiICIpKTsKKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8vIFJldHVybiBJbmZvczoKKwlyZXR1cm4gCisJCQkgICAiPGh0bWw+IiArCisJCQkgICAiPGgxPkdsZW1tU2VydmljZXM6IFBPU1Qgb24gL2luZGV4L2FkZDogYWRkIExpc3Qgb2Ygd29yZGZvcm1zLjwvaDE+IiArCisJCQkgICAiPHA+VmVyc2lvbiB2b20gIiArIHZlcnNpb25EYXRlICsgIjwvcD4iICsKKwkJCSAgICI8cD5Db25zdW1lcyA9IHRleHQvcGxhaW48L3A+IiArCisJCQkgICAiPHA+TGlzdCBsZW5ndGggPSIgKyBhckxpc3QubGVuZ3RoICsKKwkJCSAgICI8aDI+TGlzdCBpc3Q6PC9oMj5cbiIgKyBsaXN0ICsgCisJCQkgICAiPGgyPkVuZG9mbGlzdDwvaDI+IiArCisJCQkgICBtc2cgKyBtc2dHbGVtbVNjcmlwdCArIG1zZ0ltcG9ydCArCisJCQkgICAiPC9odG1sPiI7CisJCisJfSAvLyBkb1BPU1RfaW1wb3J0TGVtbWFEYXRhCisKKwkvKiBkb0dFVF92aWV3RGJJbmZvOgorCSAqIAorCSAqIEdFVCAvaW5kZXgvaW5mby86IHRleHQvcGxhaW4gPiB0ZXh0L2h0bWwuIAorCSAqIFJldHVybnMgZ2VuZXJhbCBpbmZvcyBhYm91dCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZQorCSAqIEdsZW1tIExlbW1hIERhdGFiYXNlLgorCSAqIDEwLjAxLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgiaW5mbyIpIEBQcm9kdWNlcygidGV4dC9odG1sIikKKwkgCisJcHVibGljIFN0cmluZyBkb0dFVF92aWV3RGJJbmZvKCkgCisJIAorCXsKKwlmaW5hbCBTdHJpbmcKKwkJZnVuYyA9ICJkb0dFVF92aWV3RGJJbmZvIjsKKwlpbnQKKwkJaSwgcjsKKwlTdHJpbmcKKwkJcmV0dXJuQ29udGVudDsKKwlmaW5hbCBTdHJpbmcKKwkJcmV0dXJuSGVhZGVyID0gCSI8aHRtbD48aGVhZD5cbiIgKyAKKwkJCQkJCSIgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG4iICsgCisJCQkJCQkiPC9oZWFkPlxuIiArIAorCQkJCQkJIjxoMT5HbGVtbVNlcnZpY2VzOiBHRVQgb24gL2luZGV4L2luZm88L2gxPlxuIiArCisJCQkJCQkiPGg0Pih2ZXJzID0gIiArIHZlcnNpb25EYXRlICsgIik8L2g0PlxuIiArIAorCQkJCQkJIjxoMj5DdXJyZW50IHN0YXRlIG9mIHRoZSBEYXRhYmFzZTwvaDI+XG4iOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5UcmFpbGVyID0gIjwvaHRtbD4iLAorCQlhbHJpICAgICAgICAgID0gImFsaWduPSdyaWdodCciOworCVN0cmluZ0J1aWxkZXIKKwkJdGFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCVN0cmluZworCQltc2cgPSBudWxsOworCUdsZW1tREJJbmZvCisJCWRiSW5mbyA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby8iKTsKKwkKKwlkYkluZm8gPSBHbGVtbURCLnJlYWREYkluZm9zKHByb3BzKTsKKwlpZiggZGJJbmZvID09IG51bGwgKQorCQl0YWJsZS5hcHBlbmQoIjxwPjxiPkZlaGxlcjo8L2I+IEluaGFsdCBkZXIgRGF0ZWJhbmsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiE8L3A+Iik7CisJZWxzZQorCQl7CisJCXRhYmxlLmFwcGVuZCgiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjJcIiBjZWxsc3BhY2luZz1cIjJcIj5cbiIpOworCQorCQlmb3IoaT0wOyBpPGRiSW5mby5jb3VudHMubGVuZ3RoOyBpKyspCisJCQl7CisJCQltc2cgPSBTdHJpbmcuZm9ybWF0KExvY2FsZS5HRVJNQU4sICIgPHRyPjx0ZD48Yj5BbnphaGwgJXM8L2I+PC90ZD48dGQgJXM+JSxkPC90ZD48L3RyPlxuIiwgZGJJbmZvLmNvdW50TGFiZWxzW2ldLCBhbHJpLCBkYkluZm8uY291bnRzW2ldKTsKKwkJCXRhYmxlLmFwcGVuZChtc2cpOworCQkJfQorCQl0YWJsZS5hcHBlbmQoIjwvdGFibGU+Iik7CisJCX0KKworCWNsb3NlTG9nU3RyZWFtcygpOworCQorCWZpbmFsIFN0cmluZworCQlkYk5hbWUgPSBTdHJpbmcuZm9ybWF0KCI8cD48Yj5kYXRhYmFzZTwvYj46ICVzPC9wPiIsIGZvcm1hdERiTmFtZShwcm9wcykpOworCQorCXJldHVybiByZXR1cm5IZWFkZXIgKyBkYk5hbWUgKyB0YWJsZSArIHJldHVyblRyYWlsZXI7ICAKKwl9IC8vIGRvR0VUX3ZpZXdEQkluZm8KKworCisJLyogZG9HRVRfdmlld0xlbW1hSW5mb0hUTUw6CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IHRleHQvaHRtbC4gCisJICogUmV0dXJucyB3b3JkZm9ybXMgZm9yIGEgc3VibWl0dGVkIGxlbW1hLiAKKwkgKiAKKwkgKiAxMy4wMS4yMC9GQgorCSAqLworCQorCUBHRVQgIAorCUBQYXRoKCJpbmZvL2xlbW1hL3tsZW1tYX0iKSAKKwlAUHJvZHVjZXMoInRleHQvaHRtbCIpCisJIAorCXB1YmxpYyBTdHJpbmcgZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwoCisJCQlAUGF0aFBhcmFtKHZhbHVlPSJsZW1tYSIpIAkJCQkgIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKQorCSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0hUTUwiOworCWludAorCQlpLCByOworCWZpbmFsIFN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAJIjxodG1sPjxoZWFkPlxuIiArIAorCQkJCQkJIiA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiIgKyAKKwkJCQkJCSI8L2hlYWQ+XG4iICsgCisJCQkJCQkiPGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvaW5mby9sZW1tYTwvaDE+XG4iICsKKwkJCQkJCSI8aDQ+dmVyc2lvbiAiICsgdmVyc2lvbiArICIgdm9tICIgKyB2ZXJzaW9uRGF0ZSArICIgcmVxdWVzdCA9ICciICsgTG9jYWxEYXRlVGltZS5ub3coKS50b1N0cmluZygpLnJlcGxhY2UoIlQiLCAgIiAiKSArICInPC9pPjwvaDQ+XG4iICsKKwkJCQkJCSI8cD48Yj5RdWVyeSBTeW50YXggMTo8L2I+IChDMiBPcHRpb25zIFNldHRpbmcpPC9wPiIgKworCQkJCQkJIjxwPjxjb2RlPntsZW1tYX08L2NvZGU+IDxiPm9yPC9iPiA8Y29kZT57bGVtbWF9P29wdHM9KGZsZXgpKCtjb21wKSgrb3RoZXIpKCtzcGVjKTwvY29kZT48L3A+XG4iICsKKwkJCQkJCSI8cD48Yj5FeGFtcGxlOjwvYj4gPGNvZGU+w5ZsPC9jb2RlPiA8Yj5vcjwvYj4gPGNvZGU+w5ZsP29wdHM9ZmxleCtjb21wK290aGVyK3NwZWM8L2NvZGU+PC9wPiIgKworCQkJCQkJIjxwPjxiPlF1ZXJ5IFN5bnRheCAyOjwvYj4gKGludGVybmFsIE9wdGlvbnMgU2V0dGluZyk8L3A+IiArCisJCQkJCQkiPHA+PGNvZGU+e2xlbW1hfT9wcm9wMT1bMDEyXSZhbXA7cHJvcDI9WzAxMl0mYW1wO3NwZWM9WzAxMl08L2NvZGU+ICh3aGVyZSBlYWNoIHByb3AxLCBwcm9wMiwgc3BlYyBpcyBvcHRpb25hbCkuPC9wPlxuIiArCisJCQkJCQkiPHA+PGI+RXhhbXBsZTo8L2I+IDxjb2RlPsOWbD9wcm9wMT0wJmFtcDtwcm9wMj0xJmFtcDtzcGVjPTI8L2NvZGU+PC9wPiI7CisJZmluYWwgU3RyaW5nCisJCXJldHVyblRyYWlsZXIgPSAiPC9odG1sPiI7CisJZmluYWwgU3RyaW5nCisJCWJhY2tncm91bmRjb2xvciA9ICJzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFMEUwRTBcIiI7CisJU3RyaW5nQnVpbGRlcgorCQl0YWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIik7CisJU3RyaW5nCisJCW1zZyA9IG51bGw7CisJaW50CisJCW5FcnJvcnMgPSAwLAorCQlhY2NlcHRlZEZvcm1hdCA9IDA7CisJTGVtbWFJbmZvCisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9Iik7CisJCisJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBvcHRpb25zPSclcycgcHJvcDE9JyVkJyBwcm9wMj0nJWQnIHNwZWM9JyVkJy5cbiIsIGZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCS8qIAorCWZvcihpPTA7IGk8bGVtbWEubGVuZ3RoKCk7IGkrKykKKwkJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwkJfQkKKwkgKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlciFcbiIsICBmdW5jKTsgCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjxwPjxiPkVycm9yOjwvYj4gb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXMhPC9wPlxuIik7IAorCQlyZXR1cm4gcmV0dXJuSGVhZGVyICsgbXNnICsgcmV0dXJuVHJhaWxlcjsKKwkJfQorCQkKKwlhY2NlcHRlZEZvcm1hdCA9IGdldEFjY2VwdGVkRm9ybWF0KCk7CisJCisJdGFibGUuYXBwZW5kKCI8dGhlYWQgIiArIGJhY2tncm91bmRjb2xvciArICI+XG4iKTsKKwlpZiggbGVtbWFJbmZvLm9wdHNTZXR0aW5nID09IExlbW1hSW5mby5PUFRTX1NFVFRJTkdfQzIgKSAKKwkJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD5MZW1tYSA9ICclcycgJmFtcDsgb3B0aW9ucyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwgbGVtbWFJbmZvLmxlbW1hT3JpZywgbGVtbWFJbmZvLm9wdGlvbnN0b1N0cmluZygpKTsKKwllbHNlCisJCW1zZyA9IFN0cmluZy5mb3JtYXQoIjx0cj48dGg+TGVtbWEgPSAnJXMnICZhbXA7IHByb3AxLHByb3AyLHNwZWMgc2V0IGRpcmVjdGx5LjwvdGg+PC90cj5cbiIsIGxlbW1hSW5mby5sZW1tYU9yaWcpOworCisJdGFibGUuYXBwZW5kKG1zZyk7CisJCisJbXNnID0gU3RyaW5nLmZvcm1hdCgiPHRyPjx0aD48Yj5wcm9wMSA9IDxpPiclcyc8L2k+ICZhbXA7IHByb3AyID0gPGk+JyVzJzwvaT4gJmFtcDsgc3BlYyA9IDxpPiclcyc8L2k+PC90aD48L3RyPlxuIiwKKwkJCWxlbW1hSW5mby5wcm9wMSA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AxID09IDEgPyAiKyIgOiAidW5kZWYiLCAKKwkJCWxlbW1hSW5mby5wcm9wMiA9PSAwID8gIi0iIDogbGVtbWFJbmZvLnByb3AyID09IDEgPyAiKyIgOiAidW5kZWYiLAorCQkJbGVtbWFJbmZvLnNwZWMgID09IDAgPyAiLSIgOiBsZW1tYUluZm8uc3BlYyAgPT0gMSA/ICIrIiA6ICJ1bmRlZiIpOworCXRhYmxlLmFwcGVuZChtc2cpOworCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyBzY2FuIGFsbCB3b3JkZm9ybXMgYW5kIGZvcm1hdCB0aGVtIGluIHRoZSByZXNwb25zZSBidWZmZXI7IAorCS8vIGlmIGFuIGVycm9yIG9jY3VyZXMsIHdvcmRmb3JtIHdpbGwgYmUgbnVsbDsKKwlTdHJpbmcgCisJCXdvcmRmb3JtcyA9IGxlbW1hSW5mby53ZnMySFRNTCgpOworCQorCS8vIGNsb3NlIHNxbCBzdHVmZjoKKwlpbnQKKwkJbldmcyA9IGxlbW1hSW5mby5uV2ZzOworCQorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWlmKCBsZW1tYUluZm8ubldmcyA9PSAwICkKKwkJd29yZGZvcm1zID0gIjx0cj48dGQ+a2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPjwvdHI+XG4iOworCWVsc2UgaWYoIGxlbW1hSW5mby5uV2ZzIDwgMCB8fCB3b3JkZm9ybXMgPT0gbnVsbCApCisJCXdvcmRmb3JtcyA9ICI8dHI+PHRkPkZlaGxlciBhdWZnZXRyZXRlbjoga2VpbmUgV29ydGZvcm1lbiBnZWZ1bmRlbiE8L3RkPC90cj5cbiI7CisJZWxzZQorCQl0YWJsZS5hcHBlbmQoIjx0cj48dGQ+PGI+QW56LiBnZWZ1bmRlbmUgV29ydGZvcm1lbjwvYj4gPSAiICsgbGVtbWFJbmZvLm5XZnMgKyAiPC90ZD48L3RyPlxuIik7CisJCQorCXRhYmxlLmFwcGVuZCgiPC90aGVhZD5cbiIpOworCQorCS8vIGxvZyBvdXRjb21lOgorCWlmKCBuV2ZzIDwgMCApCisJCWZvdXQucHJpbnRmKCJFcnJvcjogJXM6IHJldHVybmluZyAwIHJlc3VsdHMgW0hUTUxdLlxuIiwgZnVuYyk7CisJZWxzZQorCQlmb3V0LnByaW50ZigiRGVidWcuICVzOiByZXR1cm5pbmcgJWQgcmVzdWx0cyBbSFRNTF0uXG4iLCBmdW5jLCBuV2ZzKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlyZXR1cm4gcmV0dXJuSGVhZGVyICsgdGFibGUudG9TdHJpbmcoKSArICI8dGJvZHk+XG4iICsgd29yZGZvcm1zICsgIjwvdGJvZHk+XG4iICsgcmV0dXJuVHJhaWxlcjsKKwkKKwl9IC8vIHZpZXdMZW1tYUluZm9IVE1MCisJCisJLyogdmlld0xlbW1hSW5mb0pTT046CisJICogCisJICogR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz1vMStvMitvMy4uLgorCSAqIHdoZXJlOiBvaS4uLiA9IChmbGV4KSgrY29tcCkoK290aGVyKSgrc3BlYykgaW4gYW55IG9yZGVyLgorCSAqIEFzIG9wdHMgaXMgb3B0aW9uYWwsIGZsZXggaXMgZGVmYXVsdC4KKwkgKiAKKwkgKiBFLmcuIC9pbmRleC9pbmZvL2xlbW1hL3N0cmFobGVuP29wdHM9ZmxleCtvdGhlcgorCSAqIAorCSAqIFJldHVybnM6IGFwcGxpY2F0aW9uL2pzb24uIAorCSAqIFJldHVybnMgd29yZGZvcm1zIGZvciBhIHN1Ym1pdHRlZCBsZW1tYS4gCisJICogCisJICogbm90ZToKKwkgKiAtIGlmIEJyb3dzZXIgcmVxdWVzdDogSFRUUFNlcnZsZXRSZXF1ZXN0LmFjY2VwdCA9ICd0ZXh0L2h0bWwsLi4ueG1sLi4uJworCSAqIC0gaWYgV2Zvcm1TZXJ2aWNlcyByZXF1ZXN0OiBIdHRwU2VydmxldFJlcXVlc3QuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nLgorCSAqIAorCSAqIDI0LjAxLjIwL0ZCCisJICogCisJICogLSBzdWJtaXR0ZWQgVVJMLCBpLmUuIHRoZSByZXF1ZXN0ZWQgbGVtbWEsIGlzIGludGVycHJldGVkIGJ5IGdsYXNzZmlzaCBhcworCSAqICAgYmVpbmcgSVNPLTg4NTktMSBlbmNvZGVkLiBXaGVuIHRoZSByZXF1ZXN0IGlzIFVURi04IGVuY29kZWQsIFVtbGF1dHMgYW5kCisJICogICAnw58nIGFyZSBtaXMtaW50ZXJwcmVkZWQsIGxlYWRpbmcgdG8gYW4gZXJyb25lcm91cyByZXF1ZXN0IHRvIHRoZSBEZXJieQorCSAqICAgZGF0YWJhc2UuCisJICogLSBSZXF1ZXN0ZWQgbGVtbWEgJ2xlbW1hJyBoYXMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gVVRGLTggZmlyc3QuCisJICogLSBub3RlOiBldmVuIHdoZW4gc3VibWl0dGluZyB0aGUgR0VUIHJlcXVlc3QgYnkgc3BlY2lmeWluZyAnY2hhcmVuY29kZT1VVEYtOCcsCisJICogICBnbGFzc2Zpc2ggZG9lcyBub3QgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IGFzIGV4cGVjdGVkLgorCSAqICAgCisJICogIDIyLjEwLjIxL0ZCCisJICogCisJICogLSBpZiBhY2NlcHQ9YXBwbGljYXRpb24vanNvbiByZXR1cm4gVVRGLTggKFdmb3JtU2VydmljZXMpLgorCSAqIC0gZWxzZSBpZiBhY2NlcHQ9dGV4dC9odG1sIGRvIG5vdCB0cmFuc2Zvcm0gY2hhcmFjdGVyIGVuY29kaW5nIChCcm93c2VyKS4KKwkgKi8KKwkKKwlAR0VUICAKKwlAUGF0aCgiaW5mby9sZW1tYS97bGVtbWF9IikgCisJQENvbnN1bWVzKCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2h0bWwiKQorCUBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisJCisJcHVibGljIFJlc3BvbnNlIGRvR0VUX3ZpZXdMZW1tYUluZm9KU09OKAorCQkJQFBhdGhQYXJhbSh2YWx1ZT0ibGVtbWEiKSAJCQkJIAlmaW5hbCBTdHJpbmcgbGVtbWEsCisJCQlAUXVlcnlQYXJhbSgib3B0cyIpICBARGVmYXVsdFZhbHVlKCJ1bmRlZiIpCWZpbmFsIFN0cmluZyBvcHRpb25zLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AxIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDEsCisJCQlAUXVlcnlQYXJhbSgicHJvcDIiKSBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBwcm9wMiwKKwkJCUBRdWVyeVBhcmFtKCJzcGVjIikgIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHNwZWMgKSAKKwl7CisJZmluYWwgU3RyaW5nCisJCWZ1bmMgPSAiZG9HRVRfdmlld0xlbW1hSW5mb0pTT04iOworCWludAorCQluRXJyb3JzID0gMCwKKwkJYWNjZXB0ZWRGb3JtYXQgPSAwOworCUxlbW1hSW5mbworCQlsZW1tYUluZm87CisJTGVtbWFSZXNwb25zZQorCQlsZW1tYVJlc3AgPSBudWxsOworCVByb3BlcnRpZXMKKwkJcHJvcHM7CisJZmluYWwgYm9vbGVhbgorCQliRW5jb2RlTGVtbWEgPSBmYWxzZTsKKwkKKwlwcm9wcyA9IGluaXRfYW5kX2xvZ19SZXF1ZXN0KGZ1bmMsICIvaW5kZXgvaW5mby9sZW1tYS97bGVtbWF9P29wdHMiKTsKKwkKKwkvKiB0ZXN0OgorCWZvcihpbnQgaT0wOyBpPGxlbW1hLmxlbmd0aCgpOyBpKyspCisJeworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBjaGFyIGF0ICVkID0gJyVjJyA9IFslZF0uXG4iLCBmdW5jLCBpLCBsZW1tYS5jaGFyQXQoaSksIGxlbW1hLmNvZGVQb2ludEF0KGkpKTsKKwl9CisJKi8KKwlpZiggYkVuY29kZUxlbW1hICkKKwkJeworCQkvLyB3aGVuIGFjY2VwdGluZyBKU09OLCB1cmwgaGFzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOCwgaS5lLiB0aGUgcmVxdWVzdGVkIGxlbW1hOgorCQl0cnkgeworCQkJbGVtbWFJbmZvID0gbmV3IExlbW1hSW5mbyhuZXcgU3RyaW5nKGxlbW1hLmdldEJ5dGVzKCJJU08tODg1OS0xIiksICJ1dGYtOCIpKTsKKwkJCX0gCisJCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCUxlbW1hUmVzcG9uc2UKKwkJCQlsZW1yZXNwID0gbmV3IExlbW1hUmVzcG9uc2UoKTsKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtcmVzcCkuYnVpbGQoKTsKKwkJCX0KKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogbGVtbWE9JyVzJyBbVVRGLThdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisJZWxzZQorCQl7CisJCWxlbW1hSW5mbyA9IG5ldyBMZW1tYUluZm8obGVtbWEpOworCQlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYT0nJXMnIFt1bmNoYW5nZWRdIG9wdGlvbnM9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hSW5mby5sZW1tYU9yaWcsIG9wdGlvbnMpOworCQl9CisKKwkvKiBkb2VzIG5vdCBoZWxwOgorCSBTdHJpbmcKKwkgCXJlcXVlc3RDaGFyRW5jb2RpbmcgPSBodHRwU2VydmxldFJlcXVlc3QuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IHJlcXVlc3QgY2hhcmFjdGVyIGVuY29kaW5nID0nJXMnLlxuIiwgZnVuYywgcmVxdWVzdENoYXJFbmNvZGluZyk7CisJKi8KKwkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJaWYoIG5FcnJvcnMgIT0gMCApCisJCXsKKwkJZmVyci5wcmludGYoIkVycm9yOiAlczogRXJyb3JzIGluIG9wdGlvbnMgUGFyYW1ldGVyOiAnJXMnIVxuIiwgIGZ1bmMsIG9wdGlvbnMpOyAKKwkJTGVtbWFSZXNwb25zZQorCQkJbGVtUmVzcEVyciA9IG5ldyBMZW1tYVJlc3BvbnNlKCk7CisJCWxlbVJlc3BFcnIuaGVhZF9lcnJNZXNzID0gU3RyaW5nLmZvcm1hdCgiRXJyb3I6ICVzOiBvcHRpb25zIFBhcmFtZXRlciBjb250YWlucyB1bmtub3duIHZhbHVlczogJyVzJyFcbiIsIGZ1bmMsIG9wdGlvbnMpOworCQkKKwkJcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuQkFEX1JFUVVFU1QpLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pLmVudGl0eShsZW1SZXNwRXJyKS5idWlsZCgpOyAKKwkJfQorCQorCWFjY2VwdGVkRm9ybWF0ID0gZ2V0QWNjZXB0ZWRGb3JtYXQoKTsKKwkKKwkvLyBleHRyYWN0IGxlbW1hdGEgZnJvbSBHbGVtbURCOgorCUdsZW1tREIucmVhZERCTGVtbWFEYXRhKGxlbW1hSW5mbywgcHJvcHMpOworCQorCS8vIHRyYW5zZm9ybSBTUUwgUmVzcG9uc2UgdG8gSlNPTiBSZXNwb25zZToKKwlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkKKwlmb3V0LnByaW50ZigiRGVidWc6ICVzOiBsZW1tYVJlc3A6IG5XZnM9JWQgZXJyTWVzcz0nJXMnIGxpc3Q9JyVzJy5cbiIsIGZ1bmMsIGxlbW1hUmVzcC5oZWFkX25XZnMsIAorCQkJCQkJbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsID8gbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA6ICItIiwKKwkJCQkJCWxlbW1hUmVzcC5saXN0b2ZXZnMpOworCQorCS8vIGNsb3NlOgorCWlmKCBsZW1tYUluZm8gIT0gbnVsbCApCisJCWxlbW1hSW5mby5jbG9zZSgpOworCQorCWNsb3NlTG9nU3RyZWFtcygpOworCQorCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyA9PSBudWxsICkKKwkJeworCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5PSykudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsgCisJCS8vcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhSZXNwb25zZS5TdGF0dXMuT0spLmVudGl0eShsZW1tYVJlc3ApLmJ1aWxkKCk7IAorCQl9CisJZWxzZSAvLyBvbiBlcnJvcnM6CisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikuZW50aXR5KGxlbW1hUmVzcCkuYnVpbGQoKTsKKworCX0gLy8gdmlld0xlbW1hSW5mb0pTT04KKwkKKwkvKiB2aWV3TGVtbWFJbmZvVEVYVDoKKwkgKiAKKwkgKiBlaXRoZXI6CisJICogYSkgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cz0oZmxleCkoK2NvbXApKCtvdGhlcikoK3NwZWMpCisJICogICAgdGhpcyBpcyB0aGUgb3JpZ2luYWwgQzIgR2xlbW0gT3B0aW9uIFNldHRpbmcgYW5kIHNob3VsZCBiZSB0b3RhbGx5CisJICogICAgY29tcGF0aWJsZSB0byB0aGUgd2F5IEdsZW1tIE9wdGlvbnMgd29yayBpbiBDT1NNQVMgSUkuCisJICogYikgR0VUIC9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/KHByb3AxPW4pKCZwcm9wMj1uKSgmc3BlYz1uKQorCSAqICAgIHRoaXMgaXMgdGhlIGV4dGVuZGVkIG1vZGUgaW4gS29yQVAgd2hpY2ggbGV0cyBldmVyeSBmbGFnIGZyb20gCisJICogICAgdGhlIEdsZW1tIExlbW1hIHRhYmxlIGJlIHNldCBpbmRpdmlkdWFsbHk7CisJICogICAgd2hlcmUgbj0wIDogZmFsc2UsIG49MSA6IHRydWU7IG49MiA6IHVuZGVmLgorCSAqICAgIAorCSAqIFRoaXMgU2VydmljZSBleHBlY3RzIGZpcnN0ICJvcHRzIiB0byBiZSBzZXQgKHByZWNlZGVuY2Ugb3RoZXIgdGhlIAorCSAqIG90aGVyIG9wdGlvbnMpIC0+IEMyIE9wdGlvbiBTZXR0aW5nLCBvciAKKwkgKiBvbmUgb2YgInByb3AxIiwgInByb3AyIiBhbmQgInNwZWMiLCBpbiB3aGljaCBjYXNlIC0+IGV4dGVuZGVkIGZsYWcKKwkgKiBzZXR0aW5nIGlzIHVzZWQuCisJICogCisJICogRGVmYXVsdCBpcyA/b3B0cz1mbGV4LgorCSAqIAorCSAqIEUuZy4gL2luZGV4L2luZm8vbGVtbWEvc3RyYWhsZW4/b3B0cz1mbGV4K290aGVyCisJICogRS5nLiAvaW5kZXgvaW5mby9sZW1tYS9zdHJhaGxlbj9wcm9wMT0wJnByb3AyPTEmc3BlYz0yCisJICogCisJICogTm90ZXM6CisJICogICAgICAgICAgCisJICogUmV0dXJuczogdGV4dC9wbGFpbi4gCisJICogUmV0dXJucyBvbmx5IHdvcmRmb3JtcyBmb3IgYSBzdWJtaXR0ZWQgbGVtbWEuIAorCSAqIAorCSAqIDMxLjAxLjIwL0ZCCisJICovCisJCisJQEdFVCAgCisJQFBhdGgoImluZm8vbGVtbWEve2xlbW1hfSIpIAorCUBQcm9kdWNlcygidGV4dC9wbGFpbiIpCisJIAorCXB1YmxpYyBSZXNwb25zZSBkb0dFVF92aWV3TGVtbWFJbmZvVEVYVCgKKwkJCUBQYXRoUGFyYW0odmFsdWU9ImxlbW1hIikgCQkJCSAJZmluYWwgU3RyaW5nIGxlbW1hLAorCQkJQFF1ZXJ5UGFyYW0oIm9wdHMiKSAgQERlZmF1bHRWYWx1ZSgidW5kZWYiKQlmaW5hbCBTdHJpbmcgb3B0aW9ucywKKwkJCUBRdWVyeVBhcmFtKCJwcm9wMSIpIEBEZWZhdWx0VmFsdWUoIjMiKQkJZmluYWwgaW50IHByb3AxLAorCQkJQFF1ZXJ5UGFyYW0oInByb3AyIikgQERlZmF1bHRWYWx1ZSgiMyIpCQlmaW5hbCBpbnQgcHJvcDIsCisJCQlAUXVlcnlQYXJhbSgic3BlYyIpICBARGVmYXVsdFZhbHVlKCIzIikJCWZpbmFsIGludCBzcGVjICkKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gImRvR0VUX3ZpZXdMZW1tYUluZm9URVhUIjsKKwlpbnQKKwkJbkVycm9ycyA9IDAsCisJCWFjY2VwdGVkRm9ybWF0ID0gMDsgLy8gdW5kZWYuCisJU3RyaW5nCisJCXJlc3VsdCA9ICIiOworCUxlbW1hSW5mbworCQlsZW1tYUluZm8gPSBuZXcgTGVtbWFJbmZvKGxlbW1hKTsKKwlMZW1tYVJlc3BvbnNlCisJCWxlbW1hUmVzcCA9IG51bGw7CisJUHJvcGVydGllcworCQlwcm9wczsKKworCXByb3BzID0gaW5pdF9hbmRfbG9nX1JlcXVlc3QoZnVuYywgIi9pbmRleC9pbmZvL2xlbW1hL3tsZW1tYX0/b3B0cyIpOwkKKworCWZvdXQucHJpbnRmKCJEZWJ1ZzogJXM6IGxlbW1hPSclcycgb3B0aW9ucz0nJXMnIHByb3AxPSVkIHByb3AyPSVkIHNwZWM9JWQuXG4iLCAKKwkJCWZ1bmMsIGxlbW1hLCBvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCisJLyoKKwlmb3IoaW50IGk9MDsgaTxsZW1tYS5sZW5ndGgoKTsgaSsrKQorCXsKKwkJZm91dC5wcmludGYoIkRlYnVnOiAlczogY2hhciBhdCAlZCA9ICclYycgPSBbJWRdLlxuIiwgZnVuYywgaSwgbGVtbWEuY2hhckF0KGkpLCBsZW1tYS5jb2RlUG9pbnRBdChpKSk7CisJfQorCSovCisJYWNjZXB0ZWRGb3JtYXQgPSBnZXRBY2NlcHRlZEZvcm1hdCgpOworCQkKKwluRXJyb3JzID0gbGVtbWFJbmZvLnBhcnNlQWxsT3B0aW9ucyhvcHRpb25zLCBwcm9wMSwgcHJvcDIsIHNwZWMpOworCQorCWlmKCBuRXJyb3JzICE9IDAgKQorCQl7CisJCWZlcnIucHJpbnRmKCJFcnJvcjogJXM6IEVycm9ycyBpbiBvcHRpb25zIFBhcmFtZXRlcjogJyVzJyFcbiIsICBmdW5jLCBvcHRpb25zKTsgCisJCUxlbW1hUmVzcG9uc2UKKwkJCWxlbVJlc3BFcnIgPSBuZXcgTGVtbWFSZXNwb25zZSgpOworCQlsZW1SZXNwRXJyLmhlYWRfZXJyTWVzcyA9IFN0cmluZy5mb3JtYXQoIkVycm9yOiAlczogb3B0aW9ucyBQYXJhbWV0ZXIgY29udGFpbnMgdW5rbm93biB2YWx1ZXM6ICclcychXG4iLCBmdW5jLCBvcHRpb25zKTsKKwkJCisJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkJBRF9SRVFVRVNUKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtUmVzcEVycikuYnVpbGQoKTsgCisJCX0KKwkJCisJCisJLy8gZXh0cmFjdCBsZW1tYXRhIGZyb20gR2xlbW1EQjoKKwlHbGVtbURCLnJlYWREQkxlbW1hRGF0YShsZW1tYUluZm8sIHByb3BzKTsKKwkKKwkvLyB0cmFuc2Zvcm0gU1FMIFJlc3BvbnNlIHRvIEpTT04gUmVzcG9uc2U6CisJc3dpdGNoKGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCXJlc3VsdCA9IGxlbW1hSW5mby5yZXMyVEVYVCgpOworCQlicmVhazsKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLy8gdHJhbnNmb3JtIFNRTCBSZXNwb25zZSB0byBKU09OIFJlc3BvbnNlOgorCQlsZW1tYVJlc3AgPSBsZW1tYUluZm8ucmVzMkpTT04oKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0NfRk9STUFUX0hUTUw6CisJCS8vIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzZWUgdmlld0xlbW1hSW5mb0hUTUwoKS4KKwkJcmVzdWx0ID0gbnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gbGVtbWFJbmZvLnJlczJURVhUKCk7CisJCX0KKwkKKwkvLyBjbG9zZToKKwlpZiggbGVtbWFJbmZvICE9IG51bGwgKQorCQlsZW1tYUluZm8uY2xvc2UoKTsKKwkKKwljbG9zZUxvZ1N0cmVhbXMoKTsKKwkKKwlzd2l0Y2goIGFjY2VwdGVkRm9ybWF0KQorCQl7CisJY2FzZSBBQ0NfRk9STUFUX1RFWFQ6CisJCS8qIHJldHVybiBMZW1tYSBSZXNwb25zZSBPYmplY3QgKi8KKwkJaWYoIHJlc3VsdCAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5URVhUX1BMQUlOKS5lbnRpdHkocmVzdWx0KS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikudHlwZShNZWRpYVR5cGUuVEVYVF9QTEFJTikuZW50aXR5KCIiKS5idWlsZCgpOworCQkvLyBicmVhazsKKwkKKwljYXNlIEFDQ19GT1JNQVRfSlNPTjoKKwkJLyogcmV0dXJuIExlbW1hIFJlc3BvbnNlIE9iamVjdCAqLworCQlpZiggbGVtbWFSZXNwLmhlYWRfZXJyTWVzcyAhPSBudWxsICkKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLkFDQ0VQVEVEKS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOyAKKwkJZWxzZS8vIG9uIGVycm9yczoKKwkJCXJldHVybiBSZXNwb25zZS5zdGF0dXMoUmVzcG9uc2UuU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQkJCS50eXBlKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKS5lbnRpdHkobGVtbWFSZXNwKS5idWlsZCgpOworCQkvLyBicmVhazsKKworCWNhc2UgQUNDX0ZPUk1BVF9IVE1MOgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcm9jZWR1cmUhIikuYnVpbGQoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisJCQkJLnR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX1hNTF9UWVBFKS5lbnRpdHkoImludGVybmFsIGVycm9yOiByZXF1ZXN0ZWQgRm9ybWF0IGlzIG5vdCBrbm93biEiKS5idWlsZCgpOworCQl9CisKKworCX0gLy8gdmlld0xlbW1hSW5mb1RFWFQKKwkKKwkvKgorCSAqIFRlc3QgZnVuY3Rpb246IAorCSAqIFJldHVybnMgY3VycmVudCBjb250ZW50IG9mIExlbW1hIERhdGFiYXNlLgorCSAqIDA5LjEwLjIwL0ZCCisJICovCisJQEdFVCBAUGF0aCgidGVzdC9pbmZvIikgQFByb2R1Y2VzKCJ0ZXh0L2h0bWwiKQorCSAKKwlwdWJsaWMgU3RyaW5nIHZpZXdEYkNvbnRlbnQoKSAKKwkgCisJeworCWZpbmFsIFN0cmluZworCQlmdW5jID0gInZpZXdEYkNvbnRlbnQiOworCWludAorCQlyOworCVN0cmluZworCQlyZXR1cm5IZWFkZXIgPSAiPGh0bWw+PGgxPkdsZW1tU2VydmljZXM6IEdFVCBvbiAvaW5kZXgvdGVzdC9pbmZvPC9oMT4iICsKKwkJCQkJICAgIjxwPlZlcnNpb24gdm9tICIgKyB2ZXJzaW9uRGF0ZSArICI8L3A+IjsKKwlTdHJpbmcKKwkJcmV0dXJuVHJhaWxlciA9ICI8L2h0bWw+IjsKKwlTdHJpbmcKKwkJbXNnOworCUdsZW1tREJJbmZvCisJCWRiSW5mbzsKKwlQcm9wZXJ0aWVzCisJCXByb3BzOworCisJcHJvcHMgPSBpbml0X2FuZF9sb2dfUmVxdWVzdChmdW5jLCAiL2luZGV4L3Rlc3QvaW5mby8iKTsKKworCWRiSW5mbyA9IEdsZW1tREIucmVhZERiSW5mb3MocHJvcHMpOworCWlmKCBkYkluZm8gPT0gbnVsbCApCisJCW1zZyA9ICI8cD48Yj5GZWhsZXI6PC9iPiBJbmhhbHQgZGVyIERhdGViYW5rIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4hPC9wPiI7CisJZWxzZQorCQltc2cgPSAiPHA+QWxsZXMgZ3V0LjwvcD4iOworCisJY2xvc2VMb2dTdHJlYW1zKCk7CisJCisJcmV0dXJuIHJldHVybkhlYWRlciArIG1zZyArIHJldHVyblRyYWlsZXI7ICAKKwl9CisJCisJLyoKKwkgKiBnZXRBY2NlcHRlZEZvcm1hdAorCSAqIDE3LjAyLjIwL0ZCCisJICovCisJIAorCSBwdWJsaWMgaW50IGdldEFjY2VwdGVkRm9ybWF0KCkKKwkgCisJIHsKKwkgZmluYWwgU3RyaW5nCisJIAlmdW5jID0gImdldEFjY2VwdGVkRm9ybWF0IjsKKwlFbnVtZXJhdGlvbjxTdHJpbmc+CisJCW5hbWVzID0gaHR0cFNlcnZsZXRSZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisJIAorCS8vZm91dC5wcmludGYoIkRlYnVnOiAlczogSFRUUCBSZXF1ZXN0OlxuIiwgZnVuYyk7CisKKwl3aGlsZSggbmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkgKQorCQl7CisJCVN0cmluZworCQkJa2V5ID0gKFN0cmluZyluYW1lcy5uZXh0RWxlbWVudCgpLAorCQkJdmFsID0gKFN0cmluZylodHRwU2VydmxldFJlcXVlc3QuZ2V0SGVhZGVyKGtleSk7CisJCQorCQlmb3V0LnByaW50ZigiSGVhZGVyOiAnJXMnID0gJyVzJy5cbiIsIGtleSwgdmFsKTsKKwkJaWYoIGtleS5lcXVhbHMoImFjY2VwdCIpICkKKwkJCXsKKwkJCXN3aXRjaCggdmFsICkKKwkJCQl7CisJCQljYXNlICJ0ZXh0L3BsYWluIjogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICd0ZXh0L3BsYWluJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9URVhUOworCQkJY2FzZSAiYXBwbGljYXRpb24vanNvbiI6IAorCQkJCWZvdXQucHJpbnRmKCJhY2NlcHRlZCBmb3JtYXQgPSAnYXBwbGljL0pTT04nOiBvay5cbiIpOworCQkJCXJldHVybiBBQ0NfRk9STUFUX0pTT047CisJCQljYXNlICJ0ZXh0L2h0bWwiOiAKKwkJCQlmb3V0LnByaW50ZigiYWNjZXB0ZWQgZm9ybWF0ID0gJ2FwcGxpYy9IVE1MJzogb2suXG4iKTsKKwkJCQlyZXR1cm4gQUNDX0ZPUk1BVF9IVE1MOworCQkJZGVmYXVsdDogCisJCQkJZm91dC5wcmludGYoImFjY2VwdGVkIGZvcm1hdCA9ICclcycgPSB1bmtub3duISBEZWZhdWx0PSd0ZXh0L3BsYWluJy5cbiIsIHZhbCk7CisJCQkJcmV0dXJuIEFDQ19GT1JNQVRfVEVYVDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiAwOwkvLyBzb21ldGhpbmcgd3JvbmcuCQorCisgCX0gLy8gZ2V0QWNjZXB0ZWRGb3JtYXQJCisKK30KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzYxNDAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbUNsaWVudC8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5sb2NhdGlvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5sb2NhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQzZjEzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1DbGllbnQvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5tYXJrZXJzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1DbGllbnQvLm1hcmtlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwMGNmOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50Ly5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50L29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tQ2xpZW50L29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc5ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1DbGllbnQvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvNWIvYTgvaGlzdG9yeS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvNWIvYTgvaGlzdG9yeS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTU4OWJmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8uaW5kZXhlcy81Yi9hOC9oaXN0b3J5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvZTQvODEvM2QvNWUvaGlzdG9yeS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvZTQvODEvM2QvNWUvaGlzdG9yeS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2NmYTdjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8uaW5kZXhlcy9lNC84MS8zZC81ZS9oaXN0b3J5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvaGlzdG9yeS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvaGlzdG9yeS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRkOTllCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8uaW5kZXhlcy9oaXN0b3J5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgyZThhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmxvY2F0aW9uIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy8ubG9jYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhMWY5NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvLm1hcmtlcnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5tYXJrZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWUxYmMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwMDVkYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODJlOGEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9HbGVtbVNlcnZpY2VzMi8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5sb2NhdGlvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5sb2NhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWNiMGVjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlczIvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5tYXJrZXJzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlczIvLm1hcmtlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyNWFlNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0dsZW1tU2VydmljZXMyL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M3ODFhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvR2xlbW1TZXJ2aWNlczIvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvSnNvblRyYXZlcnNlLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzNjE0MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8ubG9jYXRpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLmxvY2F0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODRlODUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2UvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8ubWFya2VycyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS8ubWFya2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGZmM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvSnNvblRyYXZlcnNlLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL0pzb25UcmF2ZXJzZS9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2Uvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMGJkNjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9Kc29uVHJhdmVyc2Uvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzYxNDAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9UZXN0cy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5sb2NhdGlvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5sb2NhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjAyYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVGVzdHMvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5tYXJrZXJzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVGVzdHMvLm1hcmtlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5MTVmOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1Rlc3RzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQ3OGRhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVGVzdHMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzYxNDAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy9VdGlscy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5sb2NhdGlvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5sb2NhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2M4MDdmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVXRpbHMvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5tYXJrZXJzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVXRpbHMvLm1hcmtlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMzgwNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL1V0aWxzL29yZy5lY2xpcHNlLmpkdC5jb3JlL3N0YXRlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGVmZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvVXRpbHMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlSmFyLy5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzNjE0MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8ubG9jYXRpb24gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLmxvY2F0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZmExZjAKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8ubWFya2VycyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci8ubWFya2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTVmNzVmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlSmFyLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZUphci9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDc4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VKYXIvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmluZGV4ZXMvNWIvYTgvaGlzdG9yeS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmluZGV4ZXMvNWIvYTgvaGlzdG9yeS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDcxMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlcy8uaW5kZXhlcy81Yi9hOC9oaXN0b3J5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgyZThhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlcy8uaW5kZXhlcy9wcm9wZXJ0aWVzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmxvY2F0aW9uIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlcy8ubG9jYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhM2ExZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLmxvY2F0aW9uCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvLm1hcmtlcnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5tYXJrZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWQ0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5wcm9qZWN0cy93Zm9ybVNlcnZpY2VzLy5tYXJrZXJzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucHJvamVjdHMvd2Zvcm1TZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZHQuY29yZS9zdGF0ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjMDRjYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnByb2plY3RzL3dmb3JtU2VydmljZXMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc3RhdGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvaGlzdG9yeS52ZXJzaW9uIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9oaXN0b3J5LnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjYjk1NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvaGlzdG9yeS52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKwIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjOTEwOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvcHJvcGVydGllcy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMudmVyc2lvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvcHJvcGVydGllcy52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmFhYTcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMudmVyc2lvbgpAQCAtMCwwICsxIEBACisBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8xMjEudHJlZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvMTIxLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyOWM4NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvMTIxLnRyZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uc2FmZXRhYmxlL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uc2FmZXRhYmxlL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZWVlMzEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5zYWZldGFibGUvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjViMDEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKQEAgLTAsMCArMSw0IEBACitkZXNjcmlwdGlvbi5hdXRvYnVpbGRpbmc9ZmFsc2UKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZz1VVEYtOAordmVyc2lvbj0xCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZGVidWcuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDFiM2MKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZGVidWcuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitwcmVmV2F0Y2hFeHByZXNzaW9ucz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz5cclxuPHdhdGNoRXhwcmVzc2lvbnM+XHJcbjxleHByZXNzaW9uIGVuYWJsZWRcPSJ0cnVlIiB0ZXh0XD0ianNvbk5vZGUuZ2V0KCZxdW90O2YxJnF1b3Q7KSIvPlxyXG48L3dhdGNoRXhwcmVzc2lvbnM+XHJcbgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmRlYnVnLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmRlYnVnLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzAzMzYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZGVidWcudWkucHJlZnMKQEAgLTAsMCArMSw5IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuZGVidWcudWkuUFJFRl9MQVVOQ0hfUEVSU1BFQ1RJVkVTPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/PlxyXG48bGF1bmNoUGVyc3BlY3RpdmVzLz5cclxuCitvcmcuZWNsaXBzZS5kZWJ1Zy51aS51c2VyX3ZpZXdfYmluZGluZ3M9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+XHJcbjx2aWV3QmluZGluZ3M+XHJcbjx2aWV3IGlkXD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3Ij5cclxuPHBlcnNwZWN0aXZlIGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgdXNlckFjdGlvblw9Im9wZW5lZCIvPlxyXG48L3ZpZXc+XHJcbjx2aWV3IGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuVmFyaWFibGVWaWV3Ij5cclxuPHBlcnNwZWN0aXZlIGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgdXNlckFjdGlvblw9ImNsb3NlZCIvPlxyXG48L3ZpZXc+XHJcbjx2aWV3IGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3Ij5cclxuPHBlcnNwZWN0aXZlIGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgdXNlckFjdGlvblw9ImNsb3NlZCIvPlxyXG48L3ZpZXc+XHJcbjx2aWV3IGlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRXhwcmVzc2lvblZpZXciPlxyXG48cGVyc3BlY3RpdmUgaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIiB1c2VyQWN0aW9uXD0ib3BlbmVkIi8+XHJcbjwvdmlldz5cclxuPHZpZXcgaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyI+XHJcbjxwZXJzcGVjdGl2ZSBpZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIHVzZXJBY3Rpb25cPSJvcGVuZWQiLz5cclxuPC92aWV3PlxyXG48dmlldyBpZFw9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciPlxyXG48cGVyc3BlY3RpdmUgaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIiB1c2VyQWN0aW9uXD0iY2xvc2VkIi8+XHJcbjwvdmlldz5cclxuPC92aWV3QmluZGluZ3M+XHJcbgorcHJlZl9zdGF0ZV9tZW1lbnRvLm9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3PTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPFZhcmlhYmxlc1ZpZXdNZW1lbnRvIG9yZy5lY2xpcHNlLmRlYnVnLnVpLlNBU0hfREVUQUlMU19QQVJUXD0iMzE1IiBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TQVNIX1ZJRVdfUEFSVFw9IjY4NCI+XHJcbjxQUkVTRU5UQVRJT05fQ09OVEVYVF9QUk9QRVJUSUVTIElNZW1lbnRvLmludGVybmFsLmlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuQnJlYWtwb2ludFZpZXciPlxyXG48Qk9PTEVBTiBCT09MRUFOXD0idHJ1ZSIgSU1lbWVudG8uaW50ZXJuYWwuaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jaGVjayIvPlxyXG48L1BSRVNFTlRBVElPTl9DT05URVhUX1BST1BFUlRJRVM+XHJcbjwvVmFyaWFibGVzVmlld01lbWVudG8+CitwcmVmX3N0YXRlX21lbWVudG8ub3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3b3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3PTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPERlYnVnVmlld01lbWVudG8gb3JnLmVjbGlwc2UuZGVidWcudWkuQlJFQURDUlVNQl9EUk9QRE9XTl9BVVRPX0VYUEFORFw9ImZhbHNlIi8+CitwcmVmX3N0YXRlX21lbWVudG8ub3JnLmVjbGlwc2UuZGVidWcudWkuRXhwcmVzc2lvblZpZXc9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48VmFyaWFibGVzVmlld01lbWVudG8gb3JnLmVjbGlwc2UuZGVidWcudWkuU0FTSF9ERVRBSUxTX1BBUlRcPSIzMTUiIG9yZy5lY2xpcHNlLmRlYnVnLnVpLlNBU0hfVklFV19QQVJUXD0iNjg0Ij5cclxuPFBSRVNFTlRBVElPTl9DT05URVhUX1BST1BFUlRJRVMgSU1lbWVudG8uaW50ZXJuYWwuaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldyI+XHJcbjxCT09MRUFOIEJPT0xFQU5cPSJ0cnVlIiBJTWVtZW50by5pbnRlcm5hbC5pZFw9IlBSRVNFTlRBVElPTl9TSE9XX0xPR0lDQUxfU1RSVUNUVVJFUyIvPlxyXG48L1BSRVNFTlRBVElPTl9DT05URVhUX1BST1BFUlRJRVM+XHJcbjwvVmFyaWFibGVzVmlld01lbWVudG8+CitwcmVmX3N0YXRlX21lbWVudG8ub3JnLmVjbGlwc2UuZGVidWcudWkuVmFyaWFibGVWaWV3PTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPFZhcmlhYmxlc1ZpZXdNZW1lbnRvIG9yZy5lY2xpcHNlLmRlYnVnLnVpLlNBU0hfREVUQUlMU19QQVJUXD0iMzE1IiBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TQVNIX1ZJRVdfUEFSVFw9IjY4NCI+XHJcbjxDT0xVTU5fU0laRVMgSU1lbWVudG8uaW50ZXJuYWwuaWRcPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WQVJJQUxCRV9DT0xVTU5fUFJFU0VOVEFUSU9OLkNPTF9WQVJfVkFMVUUiIFNJWkVcPSI1NDgiLz5cclxuPENPTFVNTl9TSVpFUyBJTWVtZW50by5pbnRlcm5hbC5pZFw9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZBUklBTEJFX0NPTFVNTl9QUkVTRU5UQVRJT04uQ09MX1ZBUl9OQU1FIiBTSVpFXD0iMjMyIi8+XHJcbjxQUkVTRU5UQVRJT05fQ09OVEVYVF9QUk9QRVJUSUVTIElNZW1lbnRvLmludGVybmFsLmlkXD0ib3JnLmVjbGlwc2UuZGVidWcudWkuVmFyaWFibGVWaWV3Ij5cclxuPEJPT0xFQU4gQk9PTEVBTlw9InRydWUiIElNZW1lbnRvLmludGVybmFsLmlkXD0iUFJFU0VOVEFUSU9OX1NIT1dfTE9HSUNBTF9TVFJVQ1RVUkVTIi8+XHJcbjwvUFJFU0VOVEFUSU9OX0NPTlRFWFRfUFJPUEVSVElFUz5cclxuPC9WYXJpYWJsZXNWaWV3TWVtZW50bz4KK3ByZWZlcnJlZERldGFpbFBhbmVzPW9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5ERVRBSUxfUEFORV9MSU5FX0JSRUFLUE9JTlRcOm9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5ERVRBSUxfUEFORV9MSU5FX0JSRUFLUE9JTlR8RGVmYXVsdERldGFpbFBhbmVcOkRlZmF1bHREZXRhaWxQYW5lfAorcHJlZmVycmVkVGFyZ2V0cz1kZWZhdWx0XDpkZWZhdWx0fGRlZmF1bHQsb3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkudG9nZ2xlVGFyZ2V0SWRcOmRlZmF1bHR8CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuZWdpdC5jb3JlLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmVnaXQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE4NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmVnaXQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDMgQEAKK0dpdFJlcG9zaXRvcmllc1ZpZXcuR2l0RGlyZWN0b3JpZXM9CitHaXRSZXBvc2l0b3JpZXNWaWV3LkdpdERpcmVjdG9yaWVzLnJlbGF0aXZlPQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5lcHAubG9nZ2luZy5hZXJpLmlkZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRkZGUxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmVwcC5sb2dnaW5nLmFlcmkuaWRlLnByZWZzCkBAIC0wLDAgKzEsMTAgQEAKK2Fub255bWl6ZU1lc3NhZ2VzPWZhbHNlCithbm9ueW1pemVTdGFja1RyYWNlcz10cnVlCitkZWJ1Z0VuYWJsZWQ9ZmFsc2UKK2Rpc2FibGVBdXRvbWF0aWNXaXJpbmdBbmFseXNpcz1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3JlcG9ydGVyRW1haWw9CityZXBvcnRlck5hbWU9CityZXNldFNlbmRNb2RlPUtFRVAKK3Jlc2V0U2VuZE1vZGVPbj0wCitzZW5kTW9kZT1OT1RJRlkKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQ5OWRhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTMgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGhWYXJpYWJsZS5KUkVfTElCPUNcOi9Qcm9ncmFtIEZpbGVzL0phdmEvamRrMS44LjBfMjMxL2pyZS9saWIvcnQuamFyCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGhWYXJpYWJsZS5KUkVfU1JDPUNcOi9Qcm9ncmFtIEZpbGVzL0phdmEvamRrMS44LjBfMjMxL3NyYy56aXAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aFZhcmlhYmxlLkpSRV9TUkNST09UPQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoVmFyaWFibGUuSlVOSVRfSE9NRT1DXDovVXNlcnMvQWRtaW5fQSZDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5qdW5pdF80LjEyLjAudjIwMTUwNDI4MTY0MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoVmFyaWFibGUuTTJfUkVQTz1DXDovVXNlcnMvRnJhbmNrLy5tMi9yZXBvc2l0b3J5CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb2RlQ29tcGxldGUudmlzaWJpbGl0eUNoZWNrPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjgKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZWU5OTMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3Lm9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5zaG93X251bGxfZW50cmllcz10cnVlCitvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXcub3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnNob3dfbnVsbF9lbnRyaWVzPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuanVuaXQucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0Lmp1bml0LnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGYwMmMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0Lmp1bml0LnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5qdW5pdC5jb250ZW50X2Fzc2lzdF9mYXZvcml0ZV9zdGF0aWNfbWVtYmVyc19taWdyYXRlZD10cnVlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzg0NmYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBSRUZfVk1fWE1MPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/PlxyXG48dm1TZXR0aW5ncyBkZWZhdWx0Vk1cPSI1NyxvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUxMywxNTg1MjQ2NDk4MDgxIiBkZWZhdWx0Vk1Db25uZWN0b3JcPSIiPlxyXG48dm1UeXBlIGlkXD0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlIj5cclxuPHZtIGlkXD0iMTU4NTI0NjQ5ODA4MSIgbmFtZVw9ImpkazEuOC4wXzIzMSIgcGF0aFw9IkNcOlxcUHJvZ3JhbSBGaWxlc1xcSmF2YVxcamRrMS44LjBfMjMxIi8+XHJcbjwvdm1UeXBlPlxyXG48L3ZtU2V0dGluZ3M+XHJcbgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4N2E4MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSwyNyBAQAorYnJlYWRjcnVtYi5vcmcuZWNsaXBzZS5qc3QuajJlZS5KMkVFUGVyc3BlY3RpdmU9dHJ1ZQorY29udGVudF9hc3Npc3RfZGlzYWJsZWRfY29tcHV0ZXJzPW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0UHJvcG9zYWxDYXRlZ29yeVx1MDAwMG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5jYWxscy5yY3AucHJvcG9zYWxDYXRlZ29yeS50ZW1wbGF0ZXNcdTAwMDBvcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLmphdmFBbGxQcm9wb3NhbENhdGVnb3J5XHUwMDAwb3JnLmVjbGlwc2UuamR0LnVpLmphdmFBbGxQcm9wb3NhbENhdGVnb3J5XHUwMDAwb3JnLmVjbGlwc2UuamR0LnVpLmphdmFUeXBlUHJvcG9zYWxDYXRlZ29yeVx1MDAwMG9yZy5lY2xpcHNlLmpkdC51aS5qYXZhTm9UeXBlUHJvcG9zYWxDYXRlZ29yeVx1MDAwMG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5jaGFpbi5yY3AucHJvcG9zYWxDYXRlZ29yeS5jaGFpblx1MDAwMAorY29udGVudF9hc3Npc3RfbHJ1X2hpc3Rvcnk9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+PGhpc3RvcnkgbWF4TEhTXD0iMTAwIiBtYXhSSFNcPSIxMCI+PGxocyBuYW1lXD0iamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGUiPjxyaHMgbmFtZVw9ImphdmF4LndzLnJzLmNvcmUuTWVkaWFUeXBlIi8+PC9saHM+PGxocyBuYW1lXD0iamF2YXgud3MucnMuY29yZS5SZXNwb25zZSRTdGF0dXNUeXBlIj48cmhzIG5hbWVcPSJqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlJFN0YXR1cyIvPjwvbGhzPjwvaGlzdG9yeT4KK2NvbnRlbnRfYXNzaXN0X251bWJlcl9vZl9jb21wdXRlcnM9MTkKK2NvbnRlbnRfYXNzaXN0X3Byb3Bvc2Fsc19iYWNrZ3JvdW5kPTI1NSwyNTUsMjU1Citjb250ZW50X2Fzc2lzdF9wcm9wb3NhbHNfZm9yZWdyb3VuZD0wLDAsMAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5uYXZpZ2F0b3IubGF5b3V0PTIKK29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5uYXZpZ2F0b3IubGlicmFyaWVzbm9kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQudWkuZm9ybWF0dGVycHJvZmlsZXMudmVyc2lvbj0xNAorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZV90ZW1wbGF0ZXNfbWlncmF0ZWQ9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/Pjx0ZW1wbGF0ZXMvPgorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzLz4KK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LnRlbXBsYXRlc19taWdyYXRlZD10cnVlCitzcGVsbGluZ19pZ25vcmVfYW1wZXJzYW5kX2luX3Byb3BlcnRpZXM9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX2RpZ2l0cz10cnVlCitzcGVsbGluZ19pZ25vcmVfamF2YV9zdHJpbmdzPXRydWUKK3NwZWxsaW5nX2lnbm9yZV9taXhlZD10cnVlCitzcGVsbGluZ19pZ25vcmVfbm9uX2xldHRlcnM9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX3NlbnRlbmNlPXRydWUKK3NwZWxsaW5nX2lnbm9yZV9zaW5nbGVfbGV0dGVycz10cnVlCitzcGVsbGluZ19pZ25vcmVfdXBwZXI9dHJ1ZQorc3BlbGxpbmdfaWdub3JlX3VybHM9dHJ1ZQorc3BlbGxpbmdfbG9jYWxlX2luaXRpYWxpemVkPXRydWUKK3NwZWxsaW5nX3VzZXJfZGljdGlvbmFyeV9lbmNvZGluZz0KK3VzZUFubm90YXRpb25zUHJlZlBhZ2U9dHJ1ZQordXNlUXVpY2tEaWZmUHJlZlBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNiYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UudWkucHJlZnMKQEAgLTAsMCArMSwyIEBACithcmVUaGVyZVdlYlNlcnZpY2VzPWZhbHNlCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhNzVhZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuc2VhcmNoLkpTUEluZGV4TWFuYWdlcj1KU1AgSW5kZXggdjMuMTBfMjAxODA0MTJfMDEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2YzRiZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2xvY2F0aW9ub3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS45MD1DXDovUHJvZ3JhbSBGaWxlcyAoeDg2KS9KYXZhL2FwYWNoZS10b21jYXQtOS4wLjM2CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmRpc2NvdmVyeS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuZGlzY292ZXJ5LnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjFkOTYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubTJlLmRpc2NvdmVyeS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5tMmUuZGlzY292ZXJ5LnByZWYucHJvamVjdHM9CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4uY29udGV4dC5jb3JlLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLmNvbnRleHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2U5N2U0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLmNvbnRleHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitteWx5bi5hdHRlbnRpb24ubWlncmF0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLmphdmEudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTZmZTUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLmphdmEudWkucHJlZnMKQEAgLTAsMCArMSwzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5ydW4uY291bnQuM18xMF8wPTEKK29yZy5lY2xpcHNlLm15bHluLmphdmEudWkucnVuLmNvdW50LjNfMV8wPTEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5tb25pdG9yLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLm1vbml0b3IudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0NjJhNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi5tb25pdG9yLnVpLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLm15bHluLm1vbml0b3IuYWN0aXZpdHkudHJhY2tpbmcuZW5hYmxlZC5jaGVja2VkPXRydWUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjYwYzIxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCkBAIC0wLDAgKzEsNSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK21pZ3JhdGVkLnRhc2sucmVwb3NpdG9yaWVzLnNlY3VyZS5zdG9yZT10cnVlCitvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5maWx0ZXJzLm5vbm1hdGNoaW5nPXRydWUKK29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmZpbHRlcnMubm9ubWF0Y2hpbmcuZW5jb3VyYWdlZD10cnVlCitvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS53ZWxjb21lLm1lc3NhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVkNjAzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQora25vd25FRUZyYWdtZW50cz0KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuY29tcGxldGlvbi5yY3AucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvbXBsZXRpb24ucmNwLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmQ3MTEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvbXBsZXRpb24ucmNwLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorY29tcGxldGlvbl90aXBzX3NlZW49b3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvbXBsZXRpb24ucmNwLnRpcHMuZGlzY292ZXJ5XDpvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuY29tcGxldGlvbi5yY3AudGlwcy50eXBlcworZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2MzZTNlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2lnbm9yZS5kb3dubG9hZC5mYWlsdXJlcz1hbHdheXMKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yc2UuY29yZS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5yc2UuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTg0Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnJzZS5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorYWN0aXZldXNlcnByb2ZpbGVzPVBDLUJvZG1lcjtUZWFtCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnNlYXJjaC5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5zZWFyY2gucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjNjVjNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5zZWFyY2gucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2Uuc2VhcmNoLmRlZmF1bHRQZXJzcGVjdGl2ZT1vcmcuZWNsaXBzZS5zZWFyY2guZGVmYXVsdFBlcnNwZWN0aXZlLm5vbmUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS50ZWFtLnVpLnByZWZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnRlYW0udWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZDQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS50ZWFtLnVpLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLnRlYW0udWkuZmlyc3RfdGltZT1mYWxzZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmJyb3dzZXIucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkuYnJvd3Nlci5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgyMWNkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmJyb3dzZXIucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQoraW50ZXJuYWxXZWJCcm93c2VySGlzdG9yeT1odHRwXDovL3d3dy53My5vcmcvcHViL1dXVy9Qcm90b2NvbHMvfCp8aHR0cFw6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbFwjc2VjMTAuNC43fCp8aHR0cFw6Ly8xMjcuMC4wLjFcOjU0OTA0L3dzZS93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwP3wqfApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmVkaXRvcnMucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkuZWRpdG9ycy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM3ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnVpLmVkaXRvcnMucHJlZnMKQEAgLTAsMCArMSw1IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3ZlcnZpZXdSdWxlcl9taWdyYXRpb249bWlncmF0ZWRfMy4xCitwcmludE1hcmdpbj10cnVlCitzcGVsbGluZ0VuYWJsZWQ9ZmFsc2UKK3RhYldpZHRoPTMKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5pZGUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkuaWRlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDgxYjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkuaWRlLnByZWZzCkBAIC0wLDAgKzEsMTAgQEAKK0lNUE9SVF9GSUxFU19BTkRfRk9MREVSU19NT0RFPXByb21wdAorSU1QT1JUX0ZJTEVTX0FORF9GT0xERVJTX1ZJUlRVQUxfRk9MREVSX01PREU9cHJvbXB0CitQUk9CTEVNU19GSUxURVJTX01JR1JBVEU9dHJ1ZQorU0hPV19MT0NBVElPTj10cnVlCitTSE9XX0xPQ0FUSU9OX05BTUU9ZmFsc2UKK1NIT1dfUFJPRFVDVF9JTl9USVRMRT1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3BsYXRmb3JtU3RhdGU9MTU4NTI0NTMzMDY3NgorcXVpY2tTdGFydD1mYWxzZQordGlwc0FuZFRyaWNrcz10cnVlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkubW9uaXRvcmluZy5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5tb25pdG9yaW5nLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNmU5YjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkubW9uaXRvcmluZy5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitub25pbnRlcmVzdGluZ190aHJlYWRfZmlsdGVyPWphdmEuKixvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bixvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyUG9vbC5zbGVlcCxvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyUG9vbC5zdGFydEpvYixvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLnV0aWwuaW1wbC50cHQudGhyZWFkcG9vbC5FeGVjdXRvci5ydW4sb3JnLmVjbGlwc2UuZXF1aW5veC5pbnRlcm5hbC51dGlsLmltcGwudHB0LnRpbWVyLlRpbWVySW1wbC5ydW4sb3JnLmVjbGlwc2Uub3NnaS5mcmFtZXdvcmsuZXZlbnRtZ3IuRXZlbnRNYW5hZ2VyJEV2ZW50VGhyZWFkLmdldE5leHRFdmVudCxvcmcuZWNsaXBzZS5vc2dpLmZyYW1ld29yay5ldmVudG1nci5FdmVudE1hbmFnZXIkRXZlbnRUaHJlYWQucnVuLHN1bi4qCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwNzZmMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitzaG93SW50cm89ZmFsc2UKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTJhYWQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnByZWZzCkBAIC0wLDAgKzEsNSBAQAorLy9vcmcuZWNsaXBzZS51aS5jb21tYW5kcy9zdGF0ZS9vcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLm5lc3RlZC5jaGFuZ2VQcm9qZWN0UHJlc2VudGF0aW9uL29yZy5lY2xpcHNlLnVpLmNvbW1hbmRzLnJhZGlvU3RhdGU9ZmFsc2UKKy8vb3JnLmVjbGlwc2UudWkuY29tbWFuZHMvc3RhdGUvb3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXcucHJvY2Vzc29yLnhwYXRocHJvY2Vzc29yL29yZy5lY2xpcHNlLnVpLmNvbW1hbmRzLnJhZGlvU3RhdGU9eHBhdGgxMAorUExVR0lOU19OT1RfQUNUSVZBVEVEX09OX1NUQVJUVVA9b3JnLmVjbGlwc2UubTJlLmRpc2NvdmVyeTsKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS51aS5jb21tYW5kcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjxvcmcuZWNsaXBzZS51aS5jb21tYW5kcy8+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMWRkMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCituZXdGaWxlVGVtcGxhdGVOYW1lPU5ldyBIVE1MIEZpbGUgKDUpCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NDk3OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5wcmVmcwpAQCAtMCwwICsxLDEzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZm9udFByb3BhZ2F0ZWQ9dHJ1ZQorb3JnLmVjbGlwc2UuamZhY2UudGV4dGZvbnQ9MXxDb25zb2xhc3wxMC4wfDB8V0lORE9XU3wxfDB8MHwwfDB8MHwwfDB8MHwxfDB8MHwwfDB8Q29uc29sYXM7CitvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5uYXZpZ2F0b3IubGF5b3V0PTEKK29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXRvci50YWIud2lkdGg9CitvcmcuZWNsaXBzZS53c3QuanNkdC51aS5mb3JtYXR0ZXJwcm9maWxlcy52ZXJzaW9uPTExCitvcmcuZWNsaXBzZS53c3QuanNkdC51aS5qYXZhZG9jbG9jYXRpb25zLm1pZ3JhdGVkPXRydWUKK29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnRleHQuY3VzdG9tX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzLz4KK29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnRleHQudGVtcGxhdGVzX21pZ3JhdGVkPXRydWUKK3Byb3Bvc2FsT3JkZXJNaWdyYXRlZD10cnVlCit0YWJXaWR0aFByb3BhZ2F0ZWQ9dHJ1ZQordXNlQW5ub3RhdGlvbnNQcmVmUGFnZT10cnVlCit1c2VRdWlja0RpZmZQcmVmUGFnZT10cnVlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5ZDgzNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitqc3BJbmRleFN0YXRlPTEKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOWZhYjYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3J1bnRpbWVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/PlxyXG48cnVudGltZXM+XHJcbiAgPHJ1bnRpbWUgaWRcPSJKMkVFIFJ1bnRpbWUgTGlicmFyeSIgbG9jYXRpb25cPSJDXDovUHJvZ3JhbSBGaWxlcy9KYXZhL2pyZTEuOC4wXzczIiBuYW1lXD0iSjJFRSBSdW50aW1lIExpYnJhcnkiIHJ1bnRpbWUtdHlwZS1pZFw9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5ydW50aW1lVHlwZSIgdGltZXN0YW1wXD0iMCIgdm0taW5zdGFsbC1pZFw9IjE1NzM1NTgxMDU2NjMiIHZtLWluc3RhbGwtdHlwZS1pZFw9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZSIvPlxyXG4gIDxydW50aW1lIGlkXD0iQXBhY2hlIFRvbWNhdCB2OS4wIiBsb2NhdGlvblw9IkNcOi9Qcm9ncmFtIEZpbGVzL0phdmEvYXBhY2hlLXRvbWNhdC05LjAuMjkiIG5hbWVcPSJBcGFjaGUgVG9tY2F0IHY5LjAiIHJ1bnRpbWUtdHlwZS1pZFw9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuOTAiIHRpbWVzdGFtcFw9IjAiLz5cclxuICA8cnVudGltZSBpZFw9IkFwYWNoZSBUb21jYXQgdjkuMCAoMikiIGxvY2F0aW9uXD0iQ1w6L1Byb2dyYW0gRmlsZXMgKHg4NikvSmF2YS9hcGFjaGUtdG9tY2F0LTkuMC4zNiIgbmFtZVw9IkFwYWNoZSBUb21jYXQgdjkuMCAoMikiIHJ1bnRpbWUtdHlwZS1pZFw9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuOTAiIHRpbWVzdGFtcFw9IjAiLz5cclxuPC9ydW50aW1lcz5cclxuCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5kaXNjb3ZlcnkucHJlZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5kaXNjb3ZlcnkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1ZGU4ZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3Quc2VydmVyLmRpc2NvdmVyeS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2NhY2hlLWxhc3RVcGRhdGVkRGF0ZT1cIEZyaSBKdW4gMTkgMjAyMCAxMVw6NTVcOjA2IENFU1QKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NmFiODcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5wcmVmcwpAQCAtMCwwICsxLDUgQEAKK2NvbnRlbnRfYXNzaXN0X251bWJlcl9vZl9jb21wdXRlcnM9MjAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitob3Zlck1vZGlmaWVycz1jb21iaW5hdGlvbkhvdmVyfHRydWV8MDtwcm9ibGVtSG92ZXJ8ZmFsc2V8MDtkb2N1bWVudGF0aW9uSG92ZXJ8ZmFsc2V8MDthbm5vdGF0aW9uSG92ZXJ8dHJ1ZXxTaGlmdDsKK3VzZUFubm90YXRpb25zUHJlZlBhZ2U9dHJ1ZQordXNlUXVpY2tEaWZmUHJlZlBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5Njk1OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kucHJlZnMKQEAgLTAsMCArMSwzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaWFwLmRlZmF1bHRQcm90b2NvbD1odHRwXDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLworb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAuZGVmYXVsdFByb3RvY29sPWh0dHBcOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wcmVmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZjRlZjcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0Lmxhc3RBY3RpdmVQYWdlPTEKZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTBcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTBcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxMFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDExXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDExXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTFcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxMlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxMlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDEyXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTNcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxM1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE0XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTRcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxNVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxNVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE1XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTZcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTZcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAxNlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE3XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDE3XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwMTdcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAyXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDJcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAyXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwM1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTAzXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjU0MjEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwM1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDRcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDRcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA1XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDVcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA1XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwNlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA2XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjQ2NmIKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwNlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWciLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwN1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA3XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzJhMTQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwN1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDhcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbUNsaWVudCBcMDUwOFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyYTE0Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDhcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbUNsaWVudH0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA5XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQgXDA1MDlcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzMmExNAotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50IFwwNTA5XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1DbGllbnR9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50LmxhdW5jaCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1DbGllbnQubGF1bmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjU0MjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tQ2xpZW50LmxhdW5jaApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkdsZW1tQ2xpZW50fSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1TZXJ2aWNlcyBcMDUwMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMgXDA1MDFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNTI0MgotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMgXDA1MDFcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpHbGVtbVNlcnZpY2VzMn0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1TZXJ2aWNlcy1UZXN0LmxhdW5jaCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1TZXJ2aWNlcy1UZXN0LmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM3ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9HbGVtbVNlcnZpY2VzLVRlc3QubGF1bmNoCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9Imluc3RhbGwiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9InRydWUiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL2pkazEuOC4wXzIzMSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIiLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvR2xlbW1TZXJ2aWNlcy5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMubGF1bmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGNkZjMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0dsZW1tU2VydmljZXMubGF1bmNoCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6R2xlbW1TZXJ2aWNlczJ9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDFcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjMmY1NgotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpKc29uVHJhdmVyc2V9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDJcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiY2YwNgotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkpzb25UcmF2ZXJzZX0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwM1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwM1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY1MjFhCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTAzXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6SnNvblRyYXZlcnNlfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTA0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlIFwwNTA0XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjUyMWEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDRcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpKc29uVHJhdmVyc2V9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UgXDA1MDVcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmNTIxYQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL0pzb25UcmF2ZXJzZSBcMDUwNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOkpzb25UcmF2ZXJzZX0iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlLmxhdW5jaCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvSnNvblRyYXZlcnNlLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JjZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Kc29uVHJhdmVyc2UubGF1bmNoCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6SnNvblRyYXZlcnNlfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9OZXdfY29uZmlndXJhdGlvbi5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL05ld19jb25maWd1cmF0aW9uLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQwOTkxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9OZXdfY29uZmlndXJhdGlvbi5sYXVuY2gKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLmxvY2FsSmF2YUFwcGxpY2F0aW9uIj4KKzxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfUEFUSFMiPgorPGxpc3RFbnRyeSB2YWx1ZT0iL1Rlc3RzIi8+Cis8L2xpc3RBdHRyaWJ1dGU+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuTUFQUEVEX1JFU09VUkNFX1RZUEVTIj4KKzxsaXN0RW50cnkgdmFsdWU9IjQiLz4KKzwvbGlzdEF0dHJpYnV0ZT4KKzxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5BVFRSX1VTRV9TVEFSVF9PTl9GSVJTVF9USFJFQUQiIHZhbHVlPSJ0cnVlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUubGF1bmNoY29uZmlnLmNsYXNzcGF0aFByb3ZpZGVyIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5NQUlOX1RZUEUiIHZhbHVlPSIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9IlRlc3RzIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5TT1VSQ0VfUEFUSF9QUk9WSURFUiIgdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5sYXVuY2hjb25maWcuc291cmNlcGF0aFByb3ZpZGVyIi8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTBcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxMFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTBcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDExXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDExXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxMlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDEyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxM1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTNcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTRcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxNVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxNVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTZcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxNlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTZcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE3XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTdcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE3XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxOFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDE4XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxOFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTlcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAxOVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMTlcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyMFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIwXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyMFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjFcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyMVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjFcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIyXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjJcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIyXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyM1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDIzXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyM1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjRcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjRcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI1XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjVcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI1XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyNlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI2XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyNlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjdcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyN1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjdcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI4XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMjhcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI4XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyOVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDI5XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAyOVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwM1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDNcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDNcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMwXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzBcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMwXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzMVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzMVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzMlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzJcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMzXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzNcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDMzXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzNFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM0XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzNFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzNVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzVcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM2XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzZcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM2XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzN1wwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM3XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzN1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzhcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTAzOFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzhcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM5XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwMzlcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDM5XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUxYzgxCi0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJjb21waWxlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDBcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0MFwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDBcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQxXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0MlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0MlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0M1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDNcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ0XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDRcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0NVwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0NVwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDZcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0NlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDZcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ3XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDdcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYjlkOQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ3XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0OFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDQ4XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0OFwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDlcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA0OVwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNDlcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA1XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA2XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNlwwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFmNGI2Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwNlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJqYXIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA3XDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwN1wwNTEubGF1bmNoIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNiOWQ5Ci0tLSAvZGV2L251bGwKKysrICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwN1wwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlRlc3RzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0ICJhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvUHJvamVjdC1UZXN0cyBcMDUwOFwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDhcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMWM4MQotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDhcMDUxLmxhdW5jaCIKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0iY29tcGlsZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpUZXN0c30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMgXDA1MDlcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA5XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTFjODEKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzIFwwNTA5XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Byb2plY3QtVGVzdHMubGF1bmNoIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk4Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9Qcm9qZWN0LVRlc3RzLmxhdW5jaApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VGVzdHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Rlc3RKc29uLmxhdW5jaCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVGVzdEpzb24ubGF1bmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTIyZTMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Rlc3RKc29uLmxhdW5jaApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcubG9jYWxKYXZhQXBwbGljYXRpb24iPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9QQVRIUyI+Cis8bGlzdEVudHJ5IHZhbHVlPSIvVGVzdHMvc3JjL3Rlc3QvVGVzdEpzb24uamF2YSIvPgorPC9saXN0QXR0cmlidXRlPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9UWVBFUyI+Cis8bGlzdEVudHJ5IHZhbHVlPSIxIi8+Cis8L2xpc3RBdHRyaWJ1dGU+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQVRUUl9FWENMVURFX1RFU1RfQ09ERSIgdmFsdWU9InRydWUiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkNMQVNTUEFUSF9QUk9WSURFUiIgdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5sYXVuY2hjb25maWcuY2xhc3NwYXRoUHJvdmlkZXIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLk1BSU5fVFlQRSIgdmFsdWU9InRlc3QuVGVzdEpzb24iLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9IlRlc3RzIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5TT1VSQ0VfUEFUSF9QUk9WSURFUiIgdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5sYXVuY2hjb25maWcuc291cmNlcGF0aFByb3ZpZGVyIi8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1Rlc3RSdW5uZXIubGF1bmNoIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9UZXN0UnVubmVyLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJjNTU0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9UZXN0UnVubmVyLmxhdW5jaApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcubG9jYWxKYXZhQXBwbGljYXRpb24iPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9QQVRIUyI+Cis8bGlzdEVudHJ5IHZhbHVlPSIvR2xlbW1TZXJ2aWNlcyIvPgorPC9saXN0QXR0cmlidXRlPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9UWVBFUyI+Cis8bGlzdEVudHJ5IHZhbHVlPSI0Ii8+Cis8L2xpc3RBdHRyaWJ1dGU+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUubGF1bmNoY29uZmlnLmNsYXNzcGF0aFByb3ZpZGVyIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5NQUlOX1RZUEUiIHZhbHVlPSJqdW5pdC5zd2luZ3VpLlRlc3RSdW5uZXIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9IkdsZW1tU2VydmljZXMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlNPVVJDRV9QQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmxhdW5jaGNvbmZpZy5zb3VyY2VwYXRoUHJvdmlkZXIiLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1V0aWxzIFwwNTAxXDA1MS5sYXVuY2giICJiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvVXRpbHMgXDA1MDFcMDUxLmxhdW5jaCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMmJjNgotLS0gL2Rldi9udWxsCisrKyAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1V0aWxzIFwwNTAxXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6VXRpbHN9Ii8+Cis8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgImEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscyBcMDUwMlwwNTEubGF1bmNoIiAiYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1V0aWxzIFwwNTAyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDJiYzYKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscyBcMDUwMlwwNTEubGF1bmNoIgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX0RFQlVHX09VVFBVVCIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfR09BTFMiIHZhbHVlPSJwYWNrYWdlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX05PTl9SRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9PRkZMSU5FIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9QUk9GSUxFUyIgdmFsdWU9IiIvPgorPGxpc3RBdHRyaWJ1dGUga2V5PSJNMl9QUk9QRVJUSUVTIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUlVOVElNRSIgdmFsdWU9IkVNQkVEREVEIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1NLSVBfVEVTVFMiIHZhbHVlPSJmYWxzZSIvPgorPGludEF0dHJpYnV0ZSBrZXk9Ik0yX1RIUkVBRFMiIHZhbHVlPSIxIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1VQREFURV9TTkFQU0hPVFMiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1VTRVJfU0VUVElOR1MiIHZhbHVlPSIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfV09SS1NQQUNFX1JFU09MVVRJT04iIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIke3Byb2plY3RfbG9jOlV0aWxzfSIvPgorPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscy5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1V0aWxzLmxhdW5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQyYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9VdGlscy5sYXVuY2gKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5tMmUuTWF2ZW4yTGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9ERUJVR19PVVRQVVQiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX0dPQUxTIiB2YWx1ZT0icGFja2FnZSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9OT05fUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfT0ZGTElORSIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfUFJPRklMRVMiIHZhbHVlPSIiLz4KKzxsaXN0QXR0cmlidXRlIGtleT0iTTJfUFJPUEVSVElFUyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1JVTlRJTUUiIHZhbHVlPSJFTUJFRERFRCIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9TS0lQX1RFU1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxpbnRBdHRyaWJ1dGUga2V5PSJNMl9USFJFQURTIiB2YWx1ZT0iMSIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9VUERBVEVfU05BUFNIT1RTIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9VU0VSX1NFVFRJTkdTIiB2YWx1ZT0iIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX1dPUktTUEFDRV9SRVNPTFVUSU9OIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJHtwcm9qZWN0X2xvYzpVdGlsc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1dmb3JtU2VydmljZXMgXDA1MDFcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAxXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTViNmQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAxXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6d2Zvcm1TZXJ2aWNlc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1dmb3JtU2VydmljZXMgXDA1MDJcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAyXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTViNmQKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAyXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9ImNvbXBpbGUiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6d2Zvcm1TZXJ2aWNlc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1dmb3JtU2VydmljZXMgXDA1MDNcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAzXDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjdhNzUKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTAzXDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6d2Zvcm1TZXJ2aWNlc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1dmb3JtU2VydmljZXMgXDA1MDRcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTA0XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjdhNzUKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTA0XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6d2Zvcm1TZXJ2aWNlc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCAiYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL1dmb3JtU2VydmljZXMgXDA1MDVcMDUxLmxhdW5jaCIgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTA1XDA1MS5sYXVuY2giCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjdhNzUKLS0tIC9kZXYvbnVsbAorKysgImIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLy5sYXVuY2hlcy9XZm9ybVNlcnZpY2VzIFwwNTA1XDA1MS5sYXVuY2giCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6d2Zvcm1TZXJ2aWNlc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcuY29yZS8ubGF1bmNoZXMvd2Zvcm1TZXJ2aWNlcy5sYXVuY2ggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL3dmb3JtU2VydmljZXMubGF1bmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjdhNzUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLmNvcmUvLmxhdW5jaGVzL3dmb3JtU2VydmljZXMubGF1bmNoCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UubTJlLk1hdmVuMkxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfREVCVUdfT1VUUFVUIiB2YWx1ZT0iZmFsc2UiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9HT0FMUyIgdmFsdWU9InBhY2thZ2UiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfTk9OX1JFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIi8+Cis8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Ik0yX09GRkxJTkUiIHZhbHVlPSJmYWxzZSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Ik0yX1BST0ZJTEVTIiB2YWx1ZT0iIi8+Cis8bGlzdEF0dHJpYnV0ZSBrZXk9Ik0yX1BST1BFUlRJRVMiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJNMl9SVU5USU1FIiB2YWx1ZT0iRU1CRURERUQiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfU0tJUF9URVNUUyIgdmFsdWU9ImZhbHNlIi8+Cis8aW50QXR0cmlidXRlIGtleT0iTTJfVEhSRUFEUyIgdmFsdWU9IjEiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0iTTJfVVBEQVRFX1NOQVBTSE9UUyIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0iTTJfVVNFUl9TRVRUSU5HUyIgdmFsdWU9IiIvPgorPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJNMl9XT1JLU1BBQ0VfUkVTT0xVVElPTiIgdmFsdWU9ImZhbHNlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5XT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiR7cHJvamVjdF9sb2M6d2Zvcm1TZXJ2aWNlc30iLz4KKzwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcudWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjlmMTJhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkxBVU5DSF9DT05GSUdVUkFUSU9OU19ESUFMT0dfU0VDVElPTiI+CisJCTxpdGVtIHZhbHVlPSI4OTYiIGtleT0iRElBTE9HX1dJRFRIIi8+CisJCTxpdGVtIHZhbHVlPSIxfFNlZ29lIFVJfDkuMHwwfFdJTkRPV1N8MXwtMTJ8MHwwfDB8NDAwfDB8MHwwfDF8MHwwfDB8MHxTZWdvZSBVSSIga2V5PSJESUFMT0dfRk9OVF9OQU1FIi8+CisJCTxpdGVtIHZhbHVlPSIsIG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcubG9jYWxKYXZhQXBwbGljYXRpb24sIG9yZy5lY2xpcHNlLm0yZS5NYXZlbjJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSwgIiBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkVYUEFOREVEX05PREVTIi8+CisJCTxpdGVtIHZhbHVlPSI3NjIiIGtleT0ib3JnLmVjbGlwc2UuZGVidWcudWkuRElBTE9HX1NBU0hfV0VJR0hUU18yIi8+CisJCTxpdGVtIHZhbHVlPSI3MDIiIGtleT0iRElBTE9HX0hFSUdIVCIvPgorCQk8aXRlbSB2YWx1ZT0iMjM3IiBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRJQUxPR19TQVNIX1dFSUdIVFNfMSIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TSU5HTEVfTEFVTkNIX0NPTkZJR1VSQVRJT05fRElBTE9HX1NFQ1RJT04iPgorCQk8aXRlbSB2YWx1ZT0iNTY3IiBrZXk9IkRJQUxPR19XSURUSCIvPgorCQk8aXRlbSB2YWx1ZT0iMXxTZWdvZSBVSXw5LjB8MHxXSU5ET1dTfDF8LTEyfDB8MHwwfDQwMHwwfDB8MHwxfDB8MHwwfDB8U2Vnb2UgVUkiIGtleT0iRElBTE9HX0ZPTlRfTkFNRSIvPgorCQk8aXRlbSB2YWx1ZT0iNzAyIiBrZXk9IkRJQUxPR19IRUlHSFQiLz4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLnVpL2xhdW5jaENvbmZpZ3VyYXRpb25IaXN0b3J5LnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuZGVidWcudWkvbGF1bmNoQ29uZmlndXJhdGlvbkhpc3RvcnkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NTQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmRlYnVnLnVpL2xhdW5jaENvbmZpZ3VyYXRpb25IaXN0b3J5LnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsYXVuY2hIaXN0b3J5PgorPGxhdW5jaEdyb3VwIGlkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hHcm91cC5kZWJ1ZyI+Cis8bXJ1SGlzdG9yeS8+Cis8ZmF2b3JpdGVzLz4KKzwvbGF1bmNoR3JvdXA+Cis8bGF1bmNoR3JvdXAgaWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEdyb3VwLnByb2ZpbGUiPgorPG1ydUhpc3RvcnkvPgorPGZhdm9yaXRlcy8+Cis8L2xhdW5jaEdyb3VwPgorPGxhdW5jaEdyb3VwIGlkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmxhdW5jaEdyb3VwLmNvdmVyYWdlIj4KKzxtcnVIaXN0b3J5Lz4KKzxmYXZvcml0ZXMvPgorPC9sYXVuY2hHcm91cD4KKzxsYXVuY2hHcm91cCBpZD0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5sYXVuY2hHcm91cCI+Cis8bXJ1SGlzdG9yeS8+Cis8ZmF2b3JpdGVzLz4KKzwvbGF1bmNoR3JvdXA+Cis8bGF1bmNoR3JvdXAgaWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEdyb3VwLnJ1biI+Cis8bXJ1SGlzdG9yeS8+Cis8ZmF2b3JpdGVzLz4KKzwvbGF1bmNoR3JvdXA+Cis8L2xhdW5jaEhpc3Rvcnk+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmU0LndvcmtiZW5jaC93b3JrYmVuY2gueG1pIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5lNC53b3JrYmVuY2gvd29ya2JlbmNoLnhtaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmMxMWNlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5lNC53b3JrYmVuY2gvd29ya2JlbmNoLnhtaQpAQCAtMCwwICsxLDQxMDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkFTQ0lJIj8+Cis8YXBwbGljYXRpb246QXBwbGljYXRpb24geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczphZHZhbmNlZD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91aS8yMDEwL1VJTW9kZWwvYXBwbGljYXRpb24vdWkvYWR2YW5jZWQiIHhtbG5zOmFwcGxpY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VpLzIwMTAvVUlNb2RlbC9hcHBsaWNhdGlvbiIgeG1sbnM6YmFzaWM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdWkvMjAxMC9VSU1vZGVsL2FwcGxpY2F0aW9uL3VpL2Jhc2ljIiB4bWxuczptZW51PSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VpLzIwMTAvVUlNb2RlbC9hcHBsaWNhdGlvbi91aS9tZW51IiB4bWxuczp1aT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91aS8yMDEwL1VJTW9kZWwvYXBwbGljYXRpb24vdWkiIHhtaTppZD0iX0FHN004Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQubGVnYWN5LmlkZS5hcHBsaWNhdGlvbiIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIHNlbGVjdGVkRWxlbWVudD0iX0FHN004U3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0cz0iX0FHLVFSQ3hRRWV5bXlienN1TDluQkEiPgorICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7d29ya2JlbmNoPiYjeEQ7JiN4QTsmbHQ7bXJ1TGlzdD4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7VXRpbHMuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O3V0aWxzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy91dGlscy9VdGlscy5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvdXRpbHMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL3V0aWxzL1V0aWxzLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tREIuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREIuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREIuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1TZXJ2aWNlcy5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1TZXJ2aWNlcy5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvR2xlbW1TZXJ2aWNlcy5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLm0yZS5lZGl0b3IuTWF2ZW5Qb21FZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtwb20ueG1sJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9wb20ueG1sJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcy9wb20ueG1sJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Qcm9wZXJ0aWVzRmlsZUVkaXRvciZxdW90OyBuYW1lPSZxdW90O0dsZW1tU2VydmljZXMucHJvcGVydGllcyZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2Uuc291cmNlJnF1b3Q7IG5hbWU9JnF1b3Q7cGx1Z2luLmh0bWwmcXVvdDsgdG9vbHRpcD0mcXVvdDt3Zm9ybVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9wbHVnaW4uaHRtbCZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL3BsdWdpbi5odG1sJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Qcm9wZXJ0aWVzRmlsZUVkaXRvciZxdW90OyBuYW1lPSZxdW90O1dmb3JtU2VydmljZXMucHJvcGVydGllcyZxdW90OyB0b29sdGlwPSZxdW90O3dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL1dmb3JtU2VydmljZXMucHJvcGVydGllcyZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL1dmb3JtU2VydmljZXMucHJvcGVydGllcyZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5tMmUuZWRpdG9yLk1hdmVuUG9tRWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7cG9tLnhtbCZxdW90OyB0b29sdGlwPSZxdW90O3dmb3JtU2VydmljZXMvcG9tLnhtbCZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZXMvcG9tLnhtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0JnF1b3Q7IG5hbWU9JnF1b3Q7d2ViLnhtbCZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQmcXVvdDsgbmFtZT0mcXVvdDt3ZWIueG1sJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7d2Zvcm1TZXJ2aWNlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0xlbW1hSW5mby5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7R2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFJbmZvLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYUluZm8uamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1DbGllbnQuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tQ2xpZW50L3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9nbGVtbS9jbGllbnQvR2xlbW1DbGllbnQuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0dsZW1tQ2xpZW50L3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9nbGVtbS9jbGllbnQvR2xlbW1DbGllbnQuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7VHJhdmVyc2VkUGF0aC5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7SnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9qc29uL1RyYXZlcnNlZFBhdGguamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvanNvbi9UcmF2ZXJzZWRQYXRoLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O0pzb25UcmF2ZXJzZS5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7SnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9qc29uL0pzb25UcmF2ZXJzZS5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvSnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9qc29uL0pzb25UcmF2ZXJzZS5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtMZW1tYVJlc3BvbnNlLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtKc29uVHJhdmVyc2Uvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0xlbW1hUmVzcG9uc2UuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L0pzb25UcmF2ZXJzZS9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFSZXNwb25zZS5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtXb3JkZm9ybVNlcnZpY2VzLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDt3Zm9ybVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9Xb3JkZm9ybVNlcnZpY2VzLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9Xb3JkZm9ybVNlcnZpY2VzLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UubTJlLmVkaXRvci5NYXZlblBvbUVkaXRvciZxdW90OyBuYW1lPSZxdW90O3BvbS54bWwmcXVvdDsgdG9vbHRpcD0mcXVvdDt3Zm9ybVNlcnZpY2VKYXIvcG9tLnhtbCZxdW90Oz4mI3hEOyYjeEE7Jmx0O3BlcnNpc3RhYmxlIHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZUphci9wb20ueG1sJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7ZmlsZSBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IGlkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtXb3JkZm9ybVJld3JpdGUuamF2YSZxdW90OyB0b29sdGlwPSZxdW90O3dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvd2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1SZXdyaXRlLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2ZpbGU+JiN4RDsmI3hBOyZsdDtmaWxlIGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UubTJlLmVkaXRvci5NYXZlblBvbUVkaXRvciZxdW90OyBuYW1lPSZxdW90O3BvbS54bWwmcXVvdDsgdG9vbHRpcD0mcXVvdDt1dGlscy9wb20ueG1sJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7cGVyc2lzdGFibGUgcGF0aD0mcXVvdDsvdXRpbHMvcG9tLnhtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsZT4mI3hEOyYjeEE7Jmx0O2ZpbGUgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1EQkluZm8uamF2YSZxdW90OyB0b29sdGlwPSZxdW90O0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREJJbmZvLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtwZXJzaXN0YWJsZSBwYXRoPSZxdW90Oy9HbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbURCSW5mby5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9maWxlPiYjeEQ7JiN4QTsmbHQ7L21ydUxpc3Q+JiN4RDsmI3hBOyZsdDsvd29ya2JlbmNoPiIvPgorICA8dGFncz5Nb2RlbE1pZ3JhdGlvblByb2Nlc3Nvci4wMDE8L3RhZ3M+CisgIDx0YWdzPmFjdGl2ZVNjaGVtZUlkOm9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb248L3RhZ3M+CisgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6VHJpbW1lZFdpbmRvdyIgeG1pOmlkPSJfQUc3TThTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJJREVXaW5kb3ciIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNOGl4UUVleW15YnpzdUw5bkJBIiBsYWJlbD0iJXRyaW1tZWR3aW5kb3cubGFiZWwuZWNsaXBzZVNESyIgeD0iMCIgeT0iMCIgd2lkdGg9Ijk0OSIgaGVpZ2h0PSIxMDQ3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJjb29sQmFyVmlzaWJsZSIgdmFsdWU9InRydWUiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJwZXJzcGVjdGl2ZUJhclZpc2libGUiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iaXNSZXN0b3JlZCIgdmFsdWU9InRydWUiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJzaG93X2luX3RpbWUiIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtzaG93X2luX3RpbWU+JiN4RDsmI3hBOyZsdDtpZCBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXcmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7aWQgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciZxdW90Oy8+JiN4RDsmI3hBOyZsdDtpZCBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldyZxdW90Oy8+JiN4RDsmI3hBOyZsdDtpZCBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvciZxdW90Oy8+JiN4RDsmI3hBOyZsdDtpZCBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9zaG93X2luX3RpbWU+Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0id29ya2luZ1NldHMiIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt3b3JraW5nU2V0cy8+Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iYWdncmVnYXRlV29ya2luZ1NldElkIiB2YWx1ZT0iQWdncmVnYXRlIGZvciB3aW5kb3cgMTU3MzU1ODAwODM2NyIvPgorICAgIDx0YWdzPnRvcExldmVsPC90YWdzPgorICAgIDx0YWdzPnNoZWxsTWF4aW1pemVkPC90YWdzPgorICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN004aXhRRWV5bXlienN1TDluQkEiIHNlbGVjdGVkRWxlbWVudD0iX0FHN004eXhRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQZXJzcGVjdGl2ZVN0YWNrIiB4bWk6aWQ9Il9BRzdNOHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5wZXJzcGVjdGl2ZXN0YWNrIiBjb250YWluZXJEYXRhPSI3NTAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdORFN4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQZXJzcGVjdGl2ZSIgeG1pOmlkPSJfQUc3TTlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5KMkVFUGVyc3BlY3RpdmUuJmx0O0phdmEgRUU+IiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNOVN4UUVleW15YnpzdUw5bkJBIiBsYWJlbD0iJmx0O0phdmEgRUU+IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpzdC5qMmVlLnVpL2ljb25zL2Z1bGwvY3ZpZXcxNi9qMmVlX3BlcnNwZWN0aXZlLmdpZiI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0icGVyc3AuaGlkZGVuSXRlbXMiIHZhbHVlPSJwZXJzcC5oaWRlVG9vbGJhclNDOnByaW50LHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC51bmRvLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC5yZWRvLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZVNob3dTZWxlY3RlZEVsZW1lbnRPbmx5LHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUnVuVG9MaW5lLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuT3BlblByb2plY3RXaXphcmQsIi8+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLm15bHluLmRvYy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLmFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UucnNlLmNvcmUuc2VhcmNoLnNlYXJjaEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uuc2VhcmNoLnNlYXJjaEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5hbm5vdGF0aW9uTmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5uYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmNvbnZlcnRMaW5lRGVsaW1pdGVyc1RvPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbHNTZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5rZXlCaW5kaW5nczwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0Lm9wZW5GaWxlczwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuYWN0aW9uU2V0czwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuanN0LmoyZWUuSjJlZU1haW5BY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLm0yZS5jb3JlLndpemFyZHMuTWF2ZW4yUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5UZXJtaW5hbHNWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS51aS5yZXNvdXJjZVBlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2Uud3N0LndlYi51aS53ZWJEZXZQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS51aS5wcm9qZWN0LmZhY2V0LkVhclByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LnNlcnZsZXQudWkucHJvamVjdC5mYWNldC5XZWJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5lamIudWkucHJvamVjdC5mYWNldC5FamJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5qMmVlLmpjYS51aS5pbnRlcm5hbC53aXphcmQuQ29ubmVjdG9yUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS51aS5wcm9qZWN0LmZhY2V0LmFwcGNsaWVudC5BcHBDbGllbnRQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLndzdC53ZWIudWkuaW50ZXJuYWwud2l6YXJkcy5TaW1wbGVXZWJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpwdC51aS53aXphcmQubmV3SnBhUHJvamVjdDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Quc2VydmxldC51aS5pbnRlcm5hbC53aXphcmQuQWRkU2VydmxldFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLmludGVybmFsLndpemFyZC5BZGRTZXNzaW9uQmVhbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLmludGVybmFsLndpemFyZC5BZGRNZXNzYWdlRHJpdmVuQmVhbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qcHQudWkud2l6YXJkLm5ld0VudGl0eTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS53aXphcmRzLm5ldy5mb2xkZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UudWkud2l6YXJkcy5uZXcuZmlsZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanB0LmpwYS51aS53aXphcmQubmV3SnBhUHJvamVjdDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpwdC51aS5qcGFQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzdNOVN4UUVleW15YnpzdUw5bkJBIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdNOWl4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzdNOWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRvcExlZnQiIGNvbnRhaW5lckRhdGE9IjE5MjkiIHNlbGVjdGVkRWxlbWVudD0iX0FHN005eXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdNOXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIHJlZj0iX0FHOGJnQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdNLUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhiLUN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TS1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Yi15eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN00taXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Yl9peFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3TS15eFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iODA3MSIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TV9DeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN01fQ3hRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9Ijc0NTgiIHNlbGVjdGVkRWxlbWVudD0iX0FHN01fU3hRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN01fU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiIGNvbnRhaW5lckRhdGE9Ijc4NDciIHJlZj0iX0FHNzFkeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TV9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BSaWdodCIgY29udGFpbmVyRGF0YT0iMjE1MyIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TV95eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdNX3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiByZWY9Il9BRzhjYUN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05BQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiIHJlZj0iX0FHOUNYaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TkFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJib3R0b21SaWdodCIgY29udGFpbmVyRGF0YT0iMjU0MiIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkNTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5BbGxNYXJrZXJzVmlldyIgcmVmPSJfQUc4Yl95eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiByZWY9Il9BRzhjQWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciIHJlZj0iX0FHOGNCU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6U2VydmVyPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LkRhdGFTb3VyY2VFeHBsb3Jlck5hdmlnYXRvciIgcmVmPSJfQUc4Y0NDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEYXRhIE1hbmFnZW1lbnQ8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMuaW50ZXJuYWwudWkuU25pcHBldHNWaWV3IiByZWY9Il9BRzhjQ3l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjREN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQ0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlRhc2tMaXN0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjRVN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQ1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIHJlZj0iX0FHOGNFaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05DaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQm9va21hcmtWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjS1N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOQ3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgcmVmPSJfQUc4Y0xTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGVyc3BlY3RpdmUiIHhtaTppZD0iX0FHN05EU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFQZXJzcGVjdGl2ZSIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkRpeFFFZXlteWJ6c3VMOW5CQSIgbGFiZWw9IkphdmEiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpLyRubCQvaWNvbnMvZnVsbC9ldmlldzE2L2pwZXJzcGVjdGl2ZS5wbmciPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9InBlcnNwLmhpZGRlbkl0ZW1zIiB2YWx1ZT0icGVyc3AuaGlkZVRvb2xiYXJTQzpwcmludCxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudW5kbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQucmVkbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVTaG93U2VsZWN0ZWRFbGVtZW50T25seSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1blRvTGluZSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkLCIvPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQubmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3M8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhRWxlbWVudENyZWF0aW9uQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuamR0LnVpLlR5cGVIaWVyYXJjaHk8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmpkdC51aS5Tb3VyY2VWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YWRvY1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuUHJvZ3Jlc3NWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlRlbXBsYXRlc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuSmF2YVByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuTmV3UGFja2FnZUNyZWF0aW9uV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLk5ld0NsYXNzQ3JlYXRpb25XaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuTmV3SW50ZXJmYWNlQ3JlYXRpb25XaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuTmV3RW51bUNyZWF0aW9uV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLk5ld0Fubm90YXRpb25DcmVhdGlvbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qZHQudWkud2l6YXJkcy5OZXdTb3VyY2VGb2xkZXJDcmVhdGlvbldpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qZHQudWkud2l6YXJkcy5OZXdTbmlwcGV0RmlsZUNyZWF0aW9uV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpkdC51aS53aXphcmRzLk5ld0phdmFXb3JraW5nU2V0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLnVpLndpemFyZHMubmV3LmZvbGRlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS53aXphcmRzLm5ldy5maWxlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLnVpLmVkaXRvcnMud2l6YXJkcy5VbnRpdGxlZFRleHRGaWxlV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFCcm93c2luZ1BlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3M8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkud2l6YXJkcy5uZXcucmVwb3NpdG9yeS50YXNrPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS50ZWFtLnVpLkdlbmVyaWNIaXN0b3J5VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudWkudmlld3MuUmVzb3VyY2VOYXZpZ2F0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5KRFREZWJ1Z0FjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Auc2hvd0luOm9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qZHQuanVuaXQud2l6YXJkcy5OZXdUZXN0Q2FzZUNyZWF0aW9uV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5qZHQuanVuaXQuSlVuaXRBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmFudC51aS52aWV3cy5BbnRWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5hY3Rpb25TZXRzPC90YWdzPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN05EaXhRRWV5bXlienN1TDluQkEiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05HQ3hRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3TkR5eFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iMTQ2MCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkVDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzdORUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImxlZnQiIGNvbnRhaW5lckRhdGE9IjYwMDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05FU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmU0LnByaW1hcnlOYXZpZ2F0aW9uU3RhY2s8L3RhZ3M+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TkVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiByZWY9Il9BRzhiZ0N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdORWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiIHJlZj0iX0FHOUNqaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05FeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlR5cGVIaWVyYXJjaHkiIHJlZj0iX0FHOGIteXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05GQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUmVzb3VyY2VOYXZpZ2F0b3IiIHJlZj0iX0FHOGItQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05GU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0LlJlc3VsdFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNuU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TkZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdNU3RhY2siIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRhaW5lckRhdGE9IjQwMDAiPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05GeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzlDbWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdpdDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHN05HQ3hRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9Ijg1NDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05HU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzdOR1N4UUVleW15YnpzdUw5bkJBIiBjb250YWluZXJEYXRhPSI3MzA2IiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdOR2l4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOR2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIiBjb250YWluZXJEYXRhPSI3NTAwIiByZWY9Il9BRzcxZHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3Tkd5eFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iMjUwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkhpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TkhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrc01TdGFjayIgY29udGFpbmVyRGF0YT0iNTAwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3TkhTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05IU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiIHJlZj0iX0FHOUNYaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TkhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJyaWdodCIgY29udGFpbmVyRGF0YT0iNTAwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3Tkh5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmU0LnNlY29uZGFyeU5hdmlnYXRpb25TdGFjazwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tkh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgcmVmPSJfQUc4Y2FDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05JQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UZW1wbGF0ZXNWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzlDbVN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TklTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkudmlld3MuQW50VmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q25peFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkFudDwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHN05JaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYm90dG9tIiBjb250YWluZXJEYXRhPSIyNjk0IiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdOSnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5lNC5zZWNvbmRhcnlEYXRhU3RhY2s8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5KYXZhPC90YWdzPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05JeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXciIHJlZj0iX0FHOGNEQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05KQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFkb2NWaWV3IiByZWY9Il9BRzlDa3l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5Tb3VyY2VWaWV3IiByZWY9Il9BRzlDbGl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3IiByZWY9Il9BRzhjTFN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOSnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIHJlZj0iX0FHOGNFaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHN05LQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQm9va21hcmtWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjS1N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOS1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3TktpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjQWl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOS3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzlDc0N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9wS3FmRURMLUVleTRoYnBaZ2lkLWZ3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5jYWxsaGllcmFyY2h5LnZpZXciIHJlZj0iX3BLcDRBREwtRWV5NGhicFpnaWQtZnciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBlcnNwZWN0aXZlIiB4bWk6aWQ9Il9BRzdOTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiIHNlbGVjdGVkRWxlbWVudD0iX0FHN05MU3hRRWV5bXlienN1TDluQkEiIGxhYmVsPSJEZWJ1ZyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS8kbmwkL2ljb25zL2Z1bGwvZXZpZXcxNi9kZWJ1Z19wZXJzcC5wbmciPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9InBlcnNwLmhpZGRlbkl0ZW1zIiB2YWx1ZT0icGVyc3AuaGlkZVRvb2xiYXJTQzpwcmludCxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudW5kbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQucmVkbyxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVTaG93U2VsZWN0ZWRFbGVtZW50T25seSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1blRvTGluZSxwZXJzcC5oaWRlVG9vbGJhclNDOm9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkLCIvPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi5kb2MuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQubmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xzU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3M8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHM8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UZW1wbGF0ZXNWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5WYXJpYWJsZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50QWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUJyb3dzaW5nUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YVBlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS53c3QuanNkdC51aS5QYWNrYWdlRXhwbG9yZXI8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5KRFREZWJ1Z0FjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnNob3dJbjpvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5qZHQuanVuaXQuUmVzdWx0VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuYW50LnVpLnZpZXdzLkFudFZpZXc8L3RhZ3M+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3TkxTeFFFZXlteWJ6c3VMOW5CQSIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3Tk5TeFFFZXlteWJ6c3VMOW5CQSIgaG9yaXpvbnRhbD0idHJ1ZSI+CisgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3TkxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5OYXZpZ2F0b3JGb2xkZXJWaWV3IiBjb250YWluZXJEYXRhPSIxNzM2IiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzdOTHl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuZTQucHJpbWFyeU5hdmlnYXRpb25TdGFjazwvdGFncz4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tkx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiByZWY9Il9BRzhiZ0N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tk1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1ZpZXciIHJlZj0iX0FHOUNueXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tk1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLlNlcnZlcnNWaWV3IiByZWY9Il9BRzhjQlN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6U2VydmVyPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOTWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNqaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzdOTXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhiLXl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3Tk5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuUmVzdWx0VmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q25TeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3Tk5TeFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iODI2NCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MENTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHNzBBQ3hRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9Ijc1MDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBBU3hRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBBU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiIGNvbnRhaW5lckRhdGE9Ijc0NjUiIHJlZj0iX0FHNzFkeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3MEFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5PdXRsaW5lRm9sZGVyVmlldyIgY29udGFpbmVyRGF0YT0iMjUzNSIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MEF5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5lNC5zZWNvbmRhcnlOYXZpZ2F0aW9uU3RhY2s8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwQXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyIgcmVmPSJfQUc5Q295eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyIgcmVmPSJfQUc5Q3BpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldyIgcmVmPSJfQUc5Q3FTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y2FDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwQnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGNBaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MENDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkudmlld3MuQW50VmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q25peFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6QW50PC90YWdzPgorICAgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUc3MENTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5Ub29sc0ZvbGRlclZpZXciIGNvbnRhaW5lckRhdGE9IjI1MDAiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBDaXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBDaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldyIgcmVmPSJfQUc4Y0VpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+YWN0aXZlPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgcmVmPSJfQUc4Y0RDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MERDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5SZWdpc3RlclZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOUNvaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwRFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MERpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIHJlZj0iX0FHOGNLaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBEeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc5Q3JDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXciIHJlZj0iX0FHOUNyU3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwRVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3IiByZWY9Il9BRzhjTFN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQZXJzcGVjdGl2ZSIgeG1pOmlkPSJfQUc3MEVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5KMkVFUGVyc3BlY3RpdmUiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBFeXhRRWV5bXlienN1TDluQkEiIGxhYmVsPSJKYXZhIEVFIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpzdC5qMmVlLnVpL2ljb25zL2Z1bGwvY3ZpZXcxNi9qMmVlX3BlcnNwZWN0aXZlLmdpZiI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0icGVyc3AuaGlkZGVuSXRlbXMiIHZhbHVlPSJwZXJzcC5oaWRlVG9vbGJhclNDOnByaW50LHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC51bmRvLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC5yZWRvLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZVNob3dTZWxlY3RlZEVsZW1lbnRPbmx5LHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUnVuVG9MaW5lLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuT3BlblByb2plY3RXaXphcmQsIi8+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLm15bHluLmRvYy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb248L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLmFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uuc2VhcmNoLnNlYXJjaEFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5hbm5vdGF0aW9uTmF2aWdhdGlvbjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5uYXZpZ2F0aW9uPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmNvbnZlcnRMaW5lRGVsaW1pdGVyc1RvPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbHNTZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5rZXlCaW5kaW5nczwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0Lm9wZW5GaWxlczwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuYWN0aW9uU2V0czwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuanN0LmoyZWUuSjJlZU1haW5BY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnQWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLm0yZS5jb3JlLndpemFyZHMuTWF2ZW4yUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLnVpLnJlc291cmNlUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS53c3Qud2ViLnVpLndlYkRldlBlcnNwZWN0aXZlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5qMmVlLnVpLnByb2plY3QuZmFjZXQuRWFyUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Quc2VydmxldC51aS5wcm9qZWN0LmZhY2V0LldlYlByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmVqYi51aS5wcm9qZWN0LmZhY2V0LkVqYlByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LmoyZWUuamNhLnVpLmludGVybmFsLndpemFyZC5Db25uZWN0b3JQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5qMmVlLnVpLnByb2plY3QuZmFjZXQuYXBwY2xpZW50LkFwcENsaWVudFByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2Uud3N0LndlYi51aS5pbnRlcm5hbC53aXphcmRzLlNpbXBsZVdlYlByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanB0LnVpLndpemFyZC5uZXdKcGFQcm9qZWN0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5zZXJ2bGV0LnVpLmludGVybmFsLndpemFyZC5BZGRTZXJ2bGV0V2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5lamIudWkuaW50ZXJuYWwud2l6YXJkLkFkZFNlc3Npb25CZWFuV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5lamIudWkuaW50ZXJuYWwud2l6YXJkLkFkZE1lc3NhZ2VEcml2ZW5CZWFuV2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpwdC51aS53aXphcmQubmV3RW50aXR5PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLnVpLndpemFyZHMubmV3LmZvbGRlcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS53aXphcmRzLm5ldy5maWxlPC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndlYmJyb3dzZXIuYWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50QWN0aW9uU2V0PC90YWdzPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHNzBFeXhRRWV5bXlienN1TDluQkEiIHNlbGVjdGVkRWxlbWVudD0iX0FHNzBHU3hRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHNzBGQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idG9wTGVmdCIgY29udGFpbmVyRGF0YT0iMjUwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MEZTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgcmVmPSJfQUc4YmdDeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBGaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUmVzb3VyY2VOYXZpZ2F0b3IiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHOGItQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwRnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhiLXl4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZXNWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhiX2l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YSBCcm93c2luZzwvdGFncz4KKyAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BRzcwR1N4UUVleW15YnpzdUw5bkJBIiBjb250YWluZXJEYXRhPSI3NTAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwSHl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUc3MEdpeFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iNzAwMCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MEd5eFFFZXlteWJ6c3VMOW5CQSIgaG9yaXpvbnRhbD0idHJ1ZSI+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzcyIgY29udGFpbmVyRGF0YT0iNzAwMCIgcmVmPSJfQUc3MWR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzcwSEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRvcFJpZ2h0IiBjb250YWluZXJEYXRhPSIzMDAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwSFN4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBIU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiIHJlZj0iX0FHOGNhQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIgcmVmPSJfQUc5Q1hpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6TXlseW48L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzcwSHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJvdHRvbVJpZ2h0IiBjb250YWluZXJEYXRhPSIzMDAwIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcwSml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkFsbE1hcmtlcnNWaWV3IiByZWY9Il9BRzhiX3l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiIHJlZj0iX0FHOGNBaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBJaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJzVmlldyIgcmVmPSJfQUc4Y0JTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpTZXJ2ZXI8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMuaW50ZXJuYWwudWkuU25pcHBldHNWaWV3IiByZWY9Il9BRzhjQ3l4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjREN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlRhc2tMaXN0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjRVN4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwSml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIHJlZj0iX0FHOGNFaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQm9va21hcmtWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiByZWY9Il9BRzhjS1N4UUVleW15YnpzdUw5bkJBIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwS0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0tpeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUc3MEtTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc4Y0xTeFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U3RhY2siIHhtaTppZD0iX0FHNzBLaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ic3RpY2t5Rm9sZGVyUmlnaHQiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRhaW5lckRhdGE9IjI1MDAiPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwS3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuSGVscFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHNzFjQ3hRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpIZWxwPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BRzcwTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmludHJvdmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgcmVmPSJfQUc3MWN5eFFFZXlteWJ6c3VMOW5CQSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHNzBMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMudmlld3MuQ2hlYXRTaGVldFZpZXciIHRvQmVSZW5kZXJlZD0iZmFsc2UiIHJlZj0iX0FHNzFkaXhRRWV5bXlienN1TDluQkEiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpIZWxwPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc3MWNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJIZWxwIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmhlbHAudWkvaWNvbnMvdmlldzE2L2hlbHBfdmlldy5naWYiIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmhlbHAudWkuaW50ZXJuYWwudmlld3MuSGVscFZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5oZWxwLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBhY3RpdmVTZXQ9JnF1b3Q7RGVmYXVsdCZxdW90OyBleHByZXNzaW9uPSZxdW90OyZxdW90OyBwYWdlSWQ9JnF1b3Q7aW5kZXgtcGFnZSZxdW90Oy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SGVscDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzcxY1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuSGVscFZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHNzFjaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuaGVscC51aS5IZWxwVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc3MWN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pbnRyb3ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IldlbGNvbWUiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkvaWNvbnMvZnVsbC9ldmlldzE2L2RlZmF1bHR2aWV3X21pc2MucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5WaWV3SW50cm9BZGFwdGVyUGFydCIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldz4mI3hEOyYjeEE7Jmx0O3ByZXNlbnRhdGlvbiBjdXJyZW50UGFnZT0mcXVvdDt0dXRvcmlhbHMmcXVvdDsgcmVzdG9yZT0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3N0YW5kYnlQYXJ0Lz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc3MWRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pbnRyb3ZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHNzFkU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaW50cm92aWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzcxZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLnZpZXdzLkNoZWF0U2hlZXRWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJDaGVhdCBTaGVldHMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMvaWNvbnMvdmlldzE2L2NoZWF0c2hlZXRfdmlldy5naWYiIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmNoZWF0c2hlZXRzLnZpZXdzLkNoZWF0U2hlZXRWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMiLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpIZWxwPC90YWdzPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJhZHZhbmNlZDpBcmVhIiB4bWk6aWQ9Il9BRzcxZHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIiBzZWxlY3RlZEVsZW1lbnQ9Il9BRzcxZUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BRzcxZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IlBhcnRTdGFja0A0NTI1ZTllOCIgc2VsZWN0ZWRFbGVtZW50PSJfQUc3MWVTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmU0LnByaW1hcnlEYXRhU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkVkaXRvclN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5hY3RpdmU8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc3MWVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJHbGVtbURCLmphdmEiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvb2JqMTYvamN1X29iai5wbmciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O2VkaXRvciBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1EQi5qYXZhJnF1b3Q7IHBhcnROYW1lPSZxdW90O0dsZW1tREIuamF2YSZxdW90OyB0aXRsZT0mcXVvdDtHbGVtbURCLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbURCLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tREIuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtlZGl0b3JTdGF0ZSBzZWxlY3Rpb25Ib3Jpem9udGFsUGl4ZWw9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25MZW5ndGg9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25PZmZzZXQ9JnF1b3Q7NzE2OCZxdW90OyBzZWxlY3Rpb25Ub3BQaXhlbD0mcXVvdDszNzIwJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9lZGl0b3I+Ii8+CisgICAgICAgICAgPHRhZ3M+RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cmVtb3ZlT25IaWRlPC90YWdzPgorICAgICAgICAgIDx0YWdzPmFjdGl2ZTwvdGFncz4KKyAgICAgICAgICA8dGFncz5hY3RpdmVPbkNsb3NlPC90YWdzPgorICAgICAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHNzFlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iI0NvbXBpbGF0aW9uVW5pdEVkaXRvckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNDb21waWxhdGlvblVuaXRFZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvci5FZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I0Fic3RyYWN0VGV4dEVkaXRvckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgPC9tZW51cz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzcxZXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNDb21waWxhdGlvblVuaXRSdWxlckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNDb21waWxhdGlvblVuaXRSdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yLlJ1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNBYnN0cmFjdFRleHRFZGl0b3JSdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgPC9tZW51cz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzcxZkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNPdmVydmlld1J1bGVyQ29udGV4dCI+CisgICAgICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I092ZXJ2aWV3UnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc3MWZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJHbGVtbVNlcnZpY2VzLmphdmEiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvb2JqMTYvamN1X29iai5wbmciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O2VkaXRvciBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1TZXJ2aWNlcy5qYXZhJnF1b3Q7IHBhcnROYW1lPSZxdW90O0dsZW1tU2VydmljZXMuamF2YSZxdW90OyB0aXRsZT0mcXVvdDtHbGVtbVNlcnZpY2VzLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9HbGVtbVNlcnZpY2VzLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0dsZW1tU2VydmljZXMuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtlZGl0b3JTdGF0ZSBzZWxlY3Rpb25Ib3Jpem9udGFsUGl4ZWw9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25MZW5ndGg9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25PZmZzZXQ9JnF1b3Q7MTA4NjEmcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7NTEzMCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzcxZml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNDb21waWxhdGlvblVuaXRFZGl0b3JDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQ29tcGlsYXRpb25Vbml0RWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IuRWRpdG9yQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNBYnN0cmFjdFRleHRFZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4YlNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjQ29tcGlsYXRpb25Vbml0UnVsZXJDb250ZXh0Ij4KKyAgICAgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQ29tcGlsYXRpb25Vbml0UnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvci5SdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDojQWJzdHJhY3RUZXh0RWRpdG9yUnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4YlNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSIjT3ZlcnZpZXdSdWxlckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNPdmVydmlld1J1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICA8L21lbnVzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGJUU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iV29yZGZvcm1TZXJ2aWNlcy5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O1dvcmRmb3JtU2VydmljZXMuamF2YSZxdW90OyBwYXJ0TmFtZT0mcXVvdDtXb3JkZm9ybVNlcnZpY2VzLmphdmEmcXVvdDsgdGl0bGU9JnF1b3Q7V29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7d2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1TZXJ2aWNlcy5qYXZhJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7aW5wdXQgZmFjdG9yeUlEPSZxdW90O29yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0RmFjdG9yeSZxdW90OyBwYXRoPSZxdW90Oy93Zm9ybVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9Xb3JkZm9ybVNlcnZpY2VzLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzQ4MjYmcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7MTY5NSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhiU2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNvbXBhdGliaWxpdHkuZWRpdG9yIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eUVkaXRvciIgbGFiZWw9IldvcmRmb3JtUmV3cml0ZS5qYXZhIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL29iajE2L2pjdV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvciZxdW90OyBuYW1lPSZxdW90O1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7IHBhcnROYW1lPSZxdW90O1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7IHRpdGxlPSZxdW90O1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7IHRvb2x0aXA9JnF1b3Q7d2Zvcm1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvV29yZGZvcm1SZXdyaXRlLmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L3dmb3JtU2VydmljZXMvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL1dvcmRmb3JtUmV3cml0ZS5qYXZhJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2VkaXRvclN0YXRlIHNlbGVjdGlvbkhvcml6b250YWxQaXhlbD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbkxlbmd0aD0mcXVvdDswJnF1b3Q7IHNlbGVjdGlvbk9mZnNldD0mcXVvdDsxODM0JnF1b3Q7IHNlbGVjdGlvblRvcFBpeGVsPSZxdW90Ozg1NCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhiVGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNvbXBhdGliaWxpdHkuZWRpdG9yIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eUVkaXRvciIgbGFiZWw9IkdsZW1tQ2xpZW50LmphdmEiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvb2JqMTYvamN1X29iai5wbmciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O2VkaXRvciBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1DbGllbnQuamF2YSZxdW90OyBwYXJ0TmFtZT0mcXVvdDtHbGVtbUNsaWVudC5qYXZhJnF1b3Q7IHRpdGxlPSZxdW90O0dsZW1tQ2xpZW50LmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbUNsaWVudC9zcmMvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LmphdmEmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0dsZW1tQ2xpZW50L3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9nbGVtbS9jbGllbnQvR2xlbW1DbGllbnQuamF2YSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtlZGl0b3JTdGF0ZSBzZWxlY3Rpb25Ib3Jpem9udGFsUGl4ZWw9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25MZW5ndGg9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25PZmZzZXQ9JnF1b3Q7MTAwMiZxdW90OyBzZWxlY3Rpb25Ub3BQaXhlbD0mcXVvdDswJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9lZGl0b3I+Ii8+CisgICAgICAgICAgPHRhZ3M+RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cmVtb3ZlT25IaWRlPC90YWdzPgorICAgICAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJUeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iI0NvbXBpbGF0aW9uVW5pdEVkaXRvckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNDb21waWxhdGlvblVuaXRFZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvci5FZGl0b3JDb250ZXh0PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I0Fic3RyYWN0VGV4dEVkaXRvckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgPC9tZW51cz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhiVUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNDb21waWxhdGlvblVuaXRSdWxlckNvbnRleHQiPgorICAgICAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNDb21waWxhdGlvblVuaXRSdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yLlJ1bGVyQ29udGV4dDwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPnBvcHVwOiNBYnN0cmFjdFRleHRFZGl0b3JSdWxlckNvbnRleHQ8L3RhZ3M+CisgICAgICAgICAgPC9tZW51cz4KKyAgICAgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhiVVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IiNPdmVydmlld1J1bGVyQ29udGV4dCI+CisgICAgICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+cG9wdXA6I092ZXJ2aWV3UnVsZXJDb250ZXh0PC90YWdzPgorICAgICAgICAgIDwvbWVudXM+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfbVdpWm9EWjNFZXlmbHZfS3dzNHVoZyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJMZW1tYVJlc3BvbnNlLmphdmEiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvb2JqMTYvamN1X29iai5wbmciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O2VkaXRvciBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7TGVtbWFSZXNwb25zZS5qYXZhJnF1b3Q7IHBhcnROYW1lPSZxdW90O0xlbW1hUmVzcG9uc2UuamF2YSZxdW90OyB0aXRsZT0mcXVvdDtMZW1tYVJlc3BvbnNlLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtKc29uVHJhdmVyc2Uvc3JjL2RlL2tvcmFwL3NlcnZpY2VzL0xlbW1hUmVzcG9uc2UuamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O2lucHV0IGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgcGF0aD0mcXVvdDsvSnNvblRyYXZlcnNlL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYVJlc3BvbnNlLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzE5MzQmcXVvdDsgc2VsZWN0aW9uVG9wUGl4ZWw9JnF1b3Q7ODY1JnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9lZGl0b3I+Ii8+CisgICAgICAgICAgPHRhZ3M+RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmpkdC51aS5Db21waWxhdGlvblVuaXRFZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+cmVtb3ZlT25IaWRlPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0xjU3djRGlLRWV5OVh1S05XbkpKa2ciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuY29tcGF0aWJpbGl0eS5lZGl0b3IiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5RWRpdG9yIiBsYWJlbD0iTGVtbWFJbmZvLmphdmEiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvb2JqMTYvamN1X29iai5wbmciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O2VkaXRvciBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuQ29tcGlsYXRpb25Vbml0RWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7TGVtbWFJbmZvLmphdmEmcXVvdDsgcGFydE5hbWU9JnF1b3Q7TGVtbWFJbmZvLmphdmEmcXVvdDsgdGl0bGU9JnF1b3Q7TGVtbWFJbmZvLmphdmEmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL3NyYy9kZS9rb3JhcC9zZXJ2aWNlcy9MZW1tYUluZm8uamF2YSZxdW90Oz4mI3hEOyYjeEE7Jmx0O2lucHV0IGZhY3RvcnlJRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dEZhY3RvcnkmcXVvdDsgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcy9zcmMvZGUva29yYXAvc2VydmljZXMvTGVtbWFJbmZvLmphdmEmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yU3RhdGUgc2VsZWN0aW9uSG9yaXpvbnRhbFBpeGVsPSZxdW90OzAmcXVvdDsgc2VsZWN0aW9uTGVuZ3RoPSZxdW90OzkmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzIyMyZxdW90OyBzZWxlY3Rpb25Ub3BQaXhlbD0mcXVvdDsyNzAmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L2VkaXRvcj4iLz4KKyAgICAgICAgICA8dGFncz5FZGl0b3I8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+b3JnLmVjbGlwc2UuamR0LnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5yZW1vdmVPbkhpZGU8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfVGFfbFFEelFFZXl1YU85NWR5dVNqdyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmoucG5nIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDtlZGl0b3IgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlByb3BlcnRpZXNGaWxlRWRpdG9yJnF1b3Q7IG5hbWU9JnF1b3Q7R2xlbW1TZXJ2aWNlcy5wcm9wZXJ0aWVzJnF1b3Q7IHBhcnROYW1lPSZxdW90O0dsZW1tU2VydmljZXMucHJvcGVydGllcyZxdW90OyB0aXRsZT0mcXVvdDtHbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL1dlYkNvbnRlbnQvV0VCLUlORi9HbGVtbVNlcnZpY2VzLnByb3BlcnRpZXMmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvV2ViQ29udGVudC9XRUItSU5GL0dsZW1tU2VydmljZXMucHJvcGVydGllcyZxdW90Oy8+JiN4RDsmI3hBOyZsdDtlZGl0b3JTdGF0ZSBzZWxlY3Rpb25Ib3Jpem9udGFsUGl4ZWw9JnF1b3Q7MCZxdW90OyBzZWxlY3Rpb25MZW5ndGg9JnF1b3Q7NTEmcXVvdDsgc2VsZWN0aW9uT2Zmc2V0PSZxdW90OzI0OSZxdW90OyBzZWxlY3Rpb25Ub3BQaXhlbD0mcXVvdDswJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy9lZGl0b3I+Ii8+CisgICAgICAgICAgPHRhZ3M+RWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPm9yZy5lY2xpcHNlLmpkdC51aS5Qcm9wZXJ0aWVzRmlsZUVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5yZW1vdmVPbkhpZGU8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfcEY0dmdEMUFFZXk5M2JMdDZFQjNBZyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb21wYXRpYmlsaXR5LmVkaXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlFZGl0b3IiIGxhYmVsPSJHbGVtbVNlcnZpY2VzL3BvbS54bWwiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UubTJlLmVkaXRvci9pY29ucy9lZGl0b3ItcG9tLmdpZiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7ZWRpdG9yIGlkPSZxdW90O29yZy5lY2xpcHNlLm0yZS5lZGl0b3IuTWF2ZW5Qb21FZGl0b3ImcXVvdDsgbmFtZT0mcXVvdDtwb20ueG1sJnF1b3Q7IHBhcnROYW1lPSZxdW90O0dsZW1tU2VydmljZXMvcG9tLnhtbCZxdW90OyB0aXRsZT0mcXVvdDtHbGVtbVNlcnZpY2VzL3BvbS54bWwmcXVvdDsgdG9vbHRpcD0mcXVvdDtHbGVtbVNlcnZpY2VzL3BvbS54bWwmcXVvdDs+JiN4RDsmI3hBOyZsdDtpbnB1dCBmYWN0b3J5SUQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXRGYWN0b3J5JnF1b3Q7IHBhdGg9JnF1b3Q7L0dsZW1tU2VydmljZXMvcG9tLnhtbCZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZWRpdG9yPiIvPgorICAgICAgICAgIDx0YWdzPkVkaXRvcjwvdGFncz4KKyAgICAgICAgICA8dGFncz5vcmcuZWNsaXBzZS5tMmUuZWRpdG9yLk1hdmVuUG9tRWRpdG9yPC90YWdzPgorICAgICAgICAgIDx0YWdzPnJlbW92ZU9uSGlkZTwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOGJnQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iUHJvamVjdCBFeHBsb3JlciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzL2ljb25zL2Z1bGwvZXZpZXcxNi9yZXNvdXJjZV9wZXJzcC5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMuUHJvamVjdEV4cGxvcmVyIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgQ29tbW9uTmF2aWdhdG9yLkxJTktJTkdfRU5BQkxFRD0mcXVvdDswJnF1b3Q7IGN1cnJlbnRXb3JraW5nU2V0TmFtZT0mcXVvdDtBZ2dyZWdhdGUgZm9yIHdpbmRvdyAxNTczNTU4MDA4MzY3JnF1b3Q7IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMud29ya2luZ1NldHMuc2hvd1RvcExldmVsV29ya2luZ1NldHM9JnF1b3Q7MCZxdW90Oz4mI3hEOyYjeEE7Jmx0O2xhc3RSZWNlbnRseVVzZWRGaWx0ZXJzLz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4YmdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIj4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhibEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4YmxTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJsaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhibHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Ym1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIjUG9wdXBNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGJtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciNQb3B1cE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyI1BvcHVwTWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhiOGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Yi1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5SZXNvdXJjZU5hdmlnYXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iTmF2aWdhdG9yIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvZmlsZW5hdl9uYXYucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS52aWV3cy5uYXZpZ2F0b3IuUmVzb3VyY2VOYXZpZ2F0b3IiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IExJTktfTkFWSUdBVE9SX1RPX0VESVRPUj0mcXVvdDswJnF1b3Q7IHNvcnRlcj0mcXVvdDsxJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7ZmlsdGVycz4mI3hEOyYjeEE7Jmx0O2ZpbHRlciBlbGVtZW50PSZxdW90OyouY2xhc3MmcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2ZpbHRlciBlbGVtZW50PSZxdW90Oy4qJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZmlsdGVycz4mI3hEOyYjeEE7Jmx0O3NlbGVjdGlvbj4mI3hEOyYjeEE7Jmx0O2VsZW1lbnQgcGF0aD0mcXVvdDsvR2xlbW1TZXJ2aWNlcyZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvc2VsZWN0aW9uPiYjeEQ7JiN4QTsmbHQ7L3ZpZXc+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhiLVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIj4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhiLWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhiLXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJUeXBlIEhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2NsYXNzX2hpLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnR5cGVoaWVyYXJjaHkuVHlwZUhpZXJhcmNoeVZpZXdQYXJ0Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBoaWRlZmllbGRzPSZxdW90O2ZhbHNlJnF1b3Q7IGhpZGVsb2NhbHR5cGVzPSZxdW90O2ZhbHNlJnF1b3Q7IGhpZGVub25wdWJsaWM9JnF1b3Q7ZmFsc2UmcXVvdDsgaGlkZXN0YXRpYz0mcXVvdDtmYWxzZSZxdW90OyBpbnB1dD0mcXVvdDs9d2Zvcm1TZXJ2aWNlcy9zcmMmYW1wO2x0O2RlLmtvcmFwLnNlcnZpY2VzJnF1b3Q7IGxpbmtfZWRpdG9ycz0mcXVvdDswJnF1b3Q7IG12X3ZlcnRpY2FsX3Njcm9sbD0mcXVvdDswJnF1b3Q7IG9yaWVudGF0aW9uPSZxdW90OzMmcXVvdDsgcXVhbGlmaWVkX25hbWVzPSZxdW90OzAmcXVvdDsgcmF0aW89JnF1b3Q7MzUwJnF1b3Q7IHNlbGVjdGlvbj0mcXVvdDs9d2Zvcm1TZXJ2aWNlcy9DOlwvUHJvZ3JhbSBGaWxlc1wvSmF2YVwvamRrMS44LjBfMjMxXC9qcmVcL2xpYlwvcnQuamFyJmFtcDtsdDtqYXZhLmxhbmcoT2JqZWN0LmNsYXNzW09iamVjdCZxdW90OyBzaG93aW5oZXJpdGVkPSZxdW90O2ZhbHNlJnF1b3Q7IHNvcnRieWRlZmluaW5ndHlwZT0mcXVvdDtmYWxzZSZxdW90OyB2ZXJ0aWNhbF9zY3JvbGw9JnF1b3Q7MCZxdW90OyB2aWV3PSZxdW90OzImcXVvdDsgd29ya2luZ1NldE5hbWU9JnF1b3Q7QWdncmVnYXRlIGZvciB3aW5kb3cgMTU3MzU1ODAwODM2NyZxdW90Oy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhiX0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhiX1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5UeXBlSGllcmFyY2h5IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhiX2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlc1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlBhY2thZ2VzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvcGFja2FnZXMucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuYnJvd3NpbmcuUGFja2FnZXNWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YSBCcm93c2luZzwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Yl95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5BbGxNYXJrZXJzVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iTWFya2VycyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L3Byb2JsZW1zX3ZpZXcucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5tYXJrZXJzLkFsbE1hcmtlcnNWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBQUklNQVJZX1NPUlRfRklFTEQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLmFsbFNldmVyaXR5RmllbGQmcXVvdDsgY2F0ZWdvcnlHcm91cD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUudHlwZSZxdW90OyBtYXJrZXJDb250ZW50R2VuZXJhdG9yPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5hbGxNYXJrZXJzR2VuZXJhdG9yJnF1b3Q7IHBhcnROYW1lPSZxdW90O01hcmtlcnMmcXVvdDs+JiN4RDsmI3hBOyZsdDtleHBhbmRlZD4mI3hEOyYjeEE7Jmx0O2NhdGVnb3J5IElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O0phdmEgQnVpbGQgUGF0aCBQcm9ibGVtcyZxdW90Oy8+JiN4RDsmI3hBOyZsdDsvZXhwYW5kZWQ+JiN4RDsmI3hBOyZsdDtjb2x1bW5XaWR0aHMgb3JnLmVjbGlwc2UudWkuaWRlLmFsbFNldmVyaXR5RmllbGQ9JnF1b3Q7NTk5JnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5sb2NhdGlvbkZpZWxkPSZxdW90OzkwJnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5tYXJrZXJUeXBlPSZxdW90OzkwJnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5wYXRoRmllbGQ9JnF1b3Q7MTIwJnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5yZXNvdXJjZUZpZWxkPSZxdW90OzkwJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3Zpc2libGUgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLmFsbFNldmVyaXR5RmllbGQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7dmlzaWJsZSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUucmVzb3VyY2VGaWVsZCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5wYXRoRmllbGQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7dmlzaWJsZSBJTWVtZW50by5pbnRlcm5hbC5pZD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUubG9jYXRpb25GaWVsZCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5tYXJrZXJUeXBlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Y0FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5BbGxNYXJrZXJzVmlldyI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Y0FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5BbGxNYXJrZXJzVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0FpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJQcm9wZXJ0aWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLnZpZXdzL2ljb25zL2Z1bGwvZXZpZXcxNi9wcm9wX3BzLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOGNBeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Y0JDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhjQlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlNlcnZlcnMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS9pY29ucy9jdmlldzE2L3NlcnZlcnNfdmlldy5naWYiIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwuY25mLlNlcnZlcnNWaWV3MiIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IENvbW1vbk5hdmlnYXRvci5MSU5LSU5HX0VOQUJMRUQ9JnF1b3Q7MCZxdW90Oz4mI3hEOyYjeEE7Jmx0O2xhc3RSZWNlbnRseVVzZWRGaWx0ZXJzLz4mI3hEOyYjeEE7Jmx0Oy92aWV3PiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOlNlcnZlcjwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhjQml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOGNCeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJzVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LkRhdGFTb3VyY2VFeHBsb3Jlck5hdmlnYXRvciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iRGF0YSBTb3VyY2UgRXhwbG9yZXIiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS51aS5kc2UvaWNvbnMvZnVsbC9jdmlldzE2L2VudGVycHJpc2VfZXhwbG9yZXIuZ2lmIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnVpLmRzZS52aWV3cy5EYXRhU291cmNlRXhwbG9yZXJWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS51aS5kc2UiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEYXRhIE1hbmFnZW1lbnQ8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc4Y0NTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LkRhdGFTb3VyY2VFeHBsb3Jlck5hdmlnYXRvciI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc4Y0NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LkRhdGFTb3VyY2VFeHBsb3Jlck5hdmlnYXRvciIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0N5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iU25pcHBldHMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy9pY29ucy9zbmlwcGV0c192aWV3LmdpZiIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzIi8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0RDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iUHJvYmxlbXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi9wcm9ibGVtc192aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubWFya2Vycy5Qcm9ibGVtc1ZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IFBSSU1BUllfU09SVF9GSUVMRD0mcXVvdDtvcmcuZWNsaXBzZS51aS5pZGUuc2V2ZXJpdHlBbmREZXNjcmlwdGlvbkZpZWxkJnF1b3Q7IGNhdGVnb3J5R3JvdXA9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnNldmVyaXR5JnF1b3Q7IG1hcmtlckNvbnRlbnRHZW5lcmF0b3I9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnByb2JsZW1zR2VuZXJhdG9yJnF1b3Q7IHBhcnROYW1lPSZxdW90O1Byb2JsZW1zJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7Y29sdW1uV2lkdGhzIG9yZy5lY2xpcHNlLnVpLmlkZS5sb2NhdGlvbkZpZWxkPSZxdW90OzE5MyZxdW90OyBvcmcuZWNsaXBzZS51aS5pZGUubWFya2VyVHlwZT0mcXVvdDsyNTEmcXVvdDsgb3JnLmVjbGlwc2UudWkuaWRlLnBhdGhGaWVsZD0mcXVvdDsxMjAmcXVvdDsgb3JnLmVjbGlwc2UudWkuaWRlLnJlc291cmNlRmllbGQ9JnF1b3Q7MTY5JnF1b3Q7IG9yZy5lY2xpcHNlLnVpLmlkZS5zZXZlcml0eUFuZERlc2NyaXB0aW9uRmllbGQ9JnF1b3Q7ODI5JnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3Zpc2libGUgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnNldmVyaXR5QW5kRGVzY3JpcHRpb25GaWVsZCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5yZXNvdXJjZUZpZWxkJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3Zpc2libGUgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLnBhdGhGaWVsZCZxdW90Oy8+JiN4RDsmI3hBOyZsdDt2aXNpYmxlIElNZW1lbnRvLmludGVybmFsLmlkPSZxdW90O29yZy5lY2xpcHNlLnVpLmlkZS5sb2NhdGlvbkZpZWxkJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3Zpc2libGUgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2UudWkuaWRlLm1hcmtlclR5cGUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L3ZpZXc+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhjRFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjRGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXc8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLmlkZS5NYXJrZXJzVmlldzwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjRHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXc8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnVpLmlkZS5NYXJrZXJzVmlldzwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhjRUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhjRVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlRhc2tMaXN0IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJUYXNrcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L3Rhc2tzX3Rzay5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnZpZXdzLm1hcmtlcnMuVGFza3NWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0VpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlLkNvbnNvbGVWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJDb25zb2xlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmNvbnNvbGUvaWNvbnMvZnVsbC9jdmlldzE2L2NvbnNvbGVfdmlldy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmNvbnNvbGUuQ29uc29sZVZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5jb25zb2xlIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhjRXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGNGQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y0ZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjRml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGNGeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y0dDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuZGVidWcudWkuUHJvY2Vzc0NvbnNvbGVUeXBlLiNDb250ZXh0TWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjR1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlByb2Nlc3NDb25zb2xlVHlwZS4jQ29udGV4dE1lbnUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Qcm9jZXNzQ29uc29sZVR5cGUuI0NvbnRleHRNZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOGNHaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldyIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhjS1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iQm9va21hcmtzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvYmttcmtfbmF2LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubWFya2Vycy5Cb29rbWFya3NWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0tpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ncmVzc1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IlByb2dyZXNzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvcHZpZXcucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5wcm9ncmVzcy5Qcm9ncmVzc1ZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOGNLeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvZ3Jlc3NWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhjTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc4Y0xTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iU2VhcmNoIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnNlYXJjaC9pY29ucy9mdWxsL2V2aWV3MTYvc2VhcmNocmVzLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc2VhcmNoMi5pbnRlcm5hbC51aS5TZWFyY2hWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc2VhcmNoIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldyBpc1Bpbm5lZD0mcXVvdDtmYWxzZSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3ZpZXcgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7JnF1b3Q7IG9yZy5lY2xpcHNlLnNlYXJjaC5sYXN0QWN0aXZhdGlvbj0mcXVvdDswJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3ZpZXcgSU1lbWVudG8uaW50ZXJuYWwuaWQ9JnF1b3Q7b3JnLmVjbGlwc2Uuc2VhcmNoLnRleHQuRmlsZVNlYXJjaFJlc3VsdFBhZ2UmcXVvdDsgb3JnLmVjbGlwc2Uuc2VhcmNoLmxhc3RBY3RpdmF0aW9uPSZxdW90OzEmcXVvdDsgb3JnLmVjbGlwc2Uuc2VhcmNoLnJlc3VsdHBhZ2UubGF5b3V0PSZxdW90OzImcXVvdDsgb3JnLmVjbGlwc2Uuc2VhcmNoLnJlc3VsdHBhZ2UubGltaXQ9JnF1b3Q7MTAwMCZxdW90OyBvcmcuZWNsaXBzZS5zZWFyY2gucmVzdWx0cGFnZS5zb3J0aW5nPSZxdW90OzImcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L3ZpZXc+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzhjTGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzhjUGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXc8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc4Y1B5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOGNRQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldzwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzhjUVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS52aWV3cy5TZWFyY2hWaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzhjYUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJPdXRsaW5lIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLnZpZXdzL2ljb25zL2Z1bGwvZXZpZXcxNi9vdXRsaW5lX2NvLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmUiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS52aWV3cyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q0lDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSI+CisgICAgICAgIDx0YWdzPlZpZXdNZW51PC90YWdzPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOm1lbnU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q0t5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNMQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q0xpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNMeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q01TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNNaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q05DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNOU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDTml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbUZpbGUuc291cmNlLk91dGxpbmVDb250ZXh0Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubTJlLmNvcmUucG9tRmlsZS5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLm0yZS5lZGl0b3IuTWF2ZW5Qb21FZGl0b3Iuc291cmNlLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNOeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDT0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q09TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS5wb21GaWxlLnNvdXJjZS5PdXRsaW5lQ29udGV4dCI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbUZpbGUuc291cmNlLk91dGxpbmVDb250ZXh0PC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5tMmUuZWRpdG9yLk1hdmVuUG9tRWRpdG9yLnNvdXJjZS5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDT2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q095eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2Uuc291cmNlLk91dGxpbmVDb250ZXh0Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZS5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZS5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1BDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1B5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2Uuc291cmNlLk91dGxpbmVDb250ZXh0Ij4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZS5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnNvdXJjZS5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1FDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNRU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1F5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNSQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmUiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDUlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLm91dGxpbmU8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q1JpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkub3V0bGluZSI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5vdXRsaW5lPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNSeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmNvcmUucG9tRmlsZS5zb3VyY2UuT3V0bGluZUNvbnRleHQiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5tMmUuY29yZS5wb21GaWxlLnNvdXJjZS5PdXRsaW5lQ29udGV4dDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UubTJlLmVkaXRvci5NYXZlblBvbUVkaXRvci5zb3VyY2UuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IuT3V0bGluZUNvbnRleHQ8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPHRvb2xiYXIgeG1pOmlkPSJfQUc5Q1NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDWGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJUYXNrIExpc3QiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkvaWNvbnMvZXZpZXcxNi90YXNrLWxpc3QuZ2lmIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi5pbnRlcm5hbC50YXNrcy51aS52aWV3cy5UYXNrTGlzdFZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgbGlua1dpdGhFZGl0b3I9JnF1b3Q7dHJ1ZSZxdW90OyBwcmVzZW50YXRpb249JnF1b3Q7b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcml6ZWQmcXVvdDs+JiN4RDsmI3hBOyZsdDtzb3J0ZXIgZ3JvdXBCeT0mcXVvdDtDQVRFR09SWV9RVUVSWSZxdW90Oz4mI3hEOyYjeEE7Jmx0O3NvcnRlcj4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQwIHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O0RVRV9EQVRFJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQxIHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O1NDSEVEVUxFRF9EQVRFJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQyIHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O1BSSU9SSVRZJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQzIHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O1JBTksmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnNjaGVkdWxlZDQgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7REFURV9DUkVBVEVEJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQ1IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnNjaGVkdWxlZDYgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7Tk9ORSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2NoZWR1bGVkNyBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zY2hlZHVsZWQ4IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkMCBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtQUklPUklUWSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcml6ZWQxIHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O1JBTksmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkMiBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtEQVRFX0NSRUFURUQmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkMyBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jYXRlZ29yaXplZDQgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7Tk9ORSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcml6ZWQ1IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7c29ydG9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNhdGVnb3JpemVkNiBzb3J0RGlyZWN0aW9uPSZxdW90OzEmcXVvdDsgc29ydEtleT0mcXVvdDtOT05FJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O3NvcnRvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jYXRlZ29yaXplZDcgc29ydERpcmVjdGlvbj0mcXVvdDsxJnF1b3Q7IHNvcnRLZXk9JnF1b3Q7Tk9ORSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtzb3J0b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcml6ZWQ4IHNvcnREaXJlY3Rpb249JnF1b3Q7MSZxdW90OyBzb3J0S2V5PSZxdW90O05PTkUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7L3NvcnRlcj4mI3hEOyYjeEE7Jmx0Oy9zb3J0ZXI+JiN4RDsmI3hBOyZsdDtmaWx0ZXJlZFRyZWVGaW5kSGlzdG9yeS8+JiN4RDsmI3hBOyZsdDsvdmlldz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpNeWx5bjwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDWHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIj4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm1lbnVzLmFjdGl2ZVRhc2siPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNkaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm1lbnVzLmFjdGl2ZVRhc2siPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNlQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm1lbnVzLmFjdGl2ZVRhc2siPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm1lbnVzLmFjdGl2ZVRhc2siPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNmQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8bWVudXMgeHNpOnR5cGU9Im1lbnU6UG9wdXBNZW51IiB4bWk6aWQ9Il9BRzlDZlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm1lbnVzLmFjdGl2ZVRhc2siPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5tZW51cy5hY3RpdmVUYXNrPC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNmaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiPgorICAgICAgICA8dGFncz5tZW51Q29udHJpYnV0aW9uOnBvcHVwPC90YWdzPgorICAgICAgICA8dGFncz5wb3B1cDpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrczwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDZnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNqaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iUGFja2FnZSBFeHBsb3JlciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3BhY2thZ2UucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucGFja2FnZXZpZXcuUGFja2FnZUV4cGxvcmVyUGFydCIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcgZ3JvdXBfbGlicmFyaWVzPSZxdW90OzEmcXVvdDsgbGF5b3V0PSZxdW90OzImcXVvdDsgbGlua1dpdGhFZGl0b3I9JnF1b3Q7MCZxdW90OyByb290TW9kZT0mcXVvdDsxJnF1b3Q7IHdvcmtpbmdTZXROYW1lPSZxdW90O0FnZ3JlZ2F0ZSBmb3Igd2luZG93IDE1NzM1NTgwMDgzNjcmcXVvdDs+JiN4RDsmI3hBOyZsdDtjdXN0b21GaWx0ZXJzIHVzZXJEZWZpbmVkUGF0dGVybnNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7PiYjeEQ7JiN4QTsmbHQ7eG1sRGVmaW5lZEZpbHRlcnM+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLlN0YXRpY3NGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5wYWNrYWdlZXhwbG9yZXIuZmlsdGVyLmdyYWRsZS5idWlsZGZvbGRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLk1lbWJlcnNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTm9uSmF2YVByb2plY3RzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyX3BhdHRlcm5GaWx0ZXJJZF8uKiZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLk5vblNoYXJlZFByb2plY3RzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLlN5bnRoZXRpY01lbWJlcnNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Db250YWluZWRMaWJyYXJ5RmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUGFja2FnZUV4cGxvcmVyLkhpZGVJbm5lckNsYXNzRmlsZXNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLlBhY2thZ2VFeHBsb3Jlci5FbXB0eUlubmVyUGFja2FnZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5tMmUuTWF2ZW5Nb2R1bGVGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5wYWNrYWdlZXhwbG9yZXIuZmlsdGVyLmdyYWRsZS5zdWJQcm9qZWN0JnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuQ2xvc2VkUHJvamVjdHNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuRGVwcmVjYXRlZE1lbWJlcnNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuRW1wdHlMaWJyYXJ5Q29udGFpbmVyRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuUGFja2FnZURlY2xhcmF0aW9uRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuSW1wb3J0RGVjbGFyYXRpb25GaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25KYXZhRWxlbWVudEZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5MaWJyYXJ5RmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkN1QW5kQ2xhc3NGaWxlRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8+JiN4RDsmI3hBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUGFja2FnZUV4cGxvcmVyLkVtcHR5UGFja2FnZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25QdWJsaWNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuTG9jYWxUeXBlc0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvPiYjeEQ7JiN4QTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5GaWVsZHNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7Lz4mI3hEOyYjeEE7Jmx0Oy94bWxEZWZpbmVkRmlsdGVycz4mI3hEOyYjeEE7Jmx0Oy9jdXN0b21GaWx0ZXJzPiYjeEQ7JiN4QTsmbHQ7L3ZpZXc+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDanl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDxtZW51cyB4c2k6dHlwZT0ibWVudTpQb3B1cE1lbnUiIHhtaTppZD0iX0FHOUNrQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlciI+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246cG9wdXA8L3RhZ3M+CisgICAgICAgIDx0YWdzPnBvcHVwOm9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXI8L3RhZ3M+CisgICAgICA8L21lbnVzPgorICAgICAgPG1lbnVzIHhzaTp0eXBlPSJtZW51OlBvcHVwTWVudSIgeG1pOmlkPSJfQUc5Q2tTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyIj4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjpwb3B1cDwvdGFncz4KKyAgICAgICAgPHRhZ3M+cG9wdXA6b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlcjwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDa2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIiIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNreXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFkb2NWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJKYXZhZG9jIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvamF2YWRvYy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5pbmZvdmlld3MuSmF2YWRvY1ZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFkb2NWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDbFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhZG9jVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q2xpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuU291cmNlVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iRGVjbGFyYXRpb24iIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9zb3VyY2UucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuaW5mb3ZpZXdzLlNvdXJjZVZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNseXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlNvdXJjZVZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOUNtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlNvdXJjZVZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UZW1wbGF0ZXNWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJUZW1wbGF0ZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi90ZW1wbGF0ZXMucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLnRlbXBsYXRlcy5UZW1wbGF0ZXNWaWV3Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q21peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkdpdCBSZXBvc2l0b3JpZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZWdpdC51aS9pY29ucy9ldmlldzE2L3JlcG9fcmVwLnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkuaW50ZXJuYWwucmVwb3NpdG9yeS5SZXBvc2l0b3JpZXNWaWV3Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2l0PC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDbkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q25TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuUmVzdWx0VmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iSlVuaXQiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0Lmp1bml0L2ljb25zL2Z1bGwvZXZpZXcxNi9qdW5pdC5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5qdW5pdC51aS5UZXN0UnVubmVyVmlld1BhcnQiLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDbml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFudC51aS52aWV3cy5BbnRWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJBbnQiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuYW50LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9hbnRfdmlldy5wbmciIHRvb2x0aXA9IiIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmFudC5pbnRlcm5hbC51aS52aWV3cy5BbnRWaWV3Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6QW50PC90YWdzPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDbnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iRGVidWciIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZGVidWcudWkvaWNvbnMvZnVsbC9ldmlldzE2L2RlYnVnX3ZpZXcucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLmxhdW5jaC5MYXVuY2hWaWV3Ii8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJtZW1lbnRvIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/PiYjeEQ7JiN4QTsmbHQ7dmlldy8+Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfQUc5Q29DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1ZpZXciPgorICAgICAgICA8dGFncz5WaWV3TWVudTwvdGFncz4KKyAgICAgICAgPHRhZ3M+bWVudUNvbnRyaWJ1dGlvbjptZW51PC90YWdzPgorICAgICAgPC9tZW51cz4KKyAgICAgIDx0b29sYmFyIHhtaTppZD0iX0FHOUNvU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdWaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDb2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlJlZ2lzdGVyVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iUmVnaXN0ZXJzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRlYnVnLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9yZWdpc3Rlcl92aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy5yZWdpc3RlcnMuUmVnaXN0ZXJzVmlldyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDb3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iVmFyaWFibGVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRlYnVnLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi92YXJpYWJsZV92aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy52YXJpYWJsZXMuVmFyaWFibGVzVmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuVmFyaWFibGVWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDcFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDcGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJCcmVha3BvaW50cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvYnJlYWtwb2ludF92aWV3LnBuZyIgdG9vbHRpcD0iIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS52aWV3cy5icmVha3BvaW50cy5CcmVha3BvaW50c1ZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDcHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDcUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDcVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJFeHByZXNzaW9ucyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvd2F0Y2hsaXN0X3ZpZXcucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLmV4cHJlc3Npb24uRXhwcmVzc2lvblZpZXciLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3Lz4iLz4KKyAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDcWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDcXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9BRzlDckN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkVycm9yIExvZyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS52aWV3cy5sb2cvaWNvbnMvZXZpZXcxNi9lcnJvcl9sb2cucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MubG9nIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5sb2cuTG9nVmlldyIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8c2hhcmVkRWxlbWVudHMgeHNpOnR5cGU9ImJhc2ljOlBhcnQiIHhtaTppZD0iX0FHOUNyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciIGxhYmVsPSJEZWJ1ZyBTaGVsbCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkvaWNvbnMvZnVsbC9ldG9vbDE2L2Rpc3Bfc2Jvb2sucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkuZGlzcGxheS5EaXNwbGF5VmlldyIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ibWVtZW50byIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7Pz4mI3hEOyYjeEE7Jmx0O3ZpZXcvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICAgICAgPG1lbnVzIHhtaTppZD0iX0FHOUNyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkRpc3BsYXlWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDcnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5VmlldyIgdmlzaWJsZT0iZmFsc2UiLz4KKyAgICA8L3NoYXJlZEVsZW1lbnRzPgorICAgIDxzaGFyZWRFbGVtZW50cyB4c2k6dHlwZT0iYmFzaWM6UGFydCIgeG1pOmlkPSJfQUc5Q3NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3IiBsYWJlbD0iQ292ZXJhZ2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZWNsZW1tYS51aS9pY29ucy9mdWxsL2V2aWV3MTYvY292ZXJhZ2UucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aSIvPgorICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWNsZW1tYS5pbnRlcm5hbC51aS5jb3ZlcmFnZXZpZXcuQ292ZXJhZ2VWaWV3Ii8+CisgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgICAgIDxtZW51cyB4bWk6aWQ9Il9BRzlDc1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9BRzlDc2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VWaWV3IiB2aXNpYmxlPSJmYWxzZSIvPgorICAgIDwvc2hhcmVkRWxlbWVudHM+CisgICAgPHNoYXJlZEVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0IiB4bWk6aWQ9Il9wS3A0QURMLUVleTRoYnBaZ2lkLWZ3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5jYWxsaGllcmFyY2h5LnZpZXciIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyIgbGFiZWw9IkNhbGwgSGllcmFyY2h5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvY2FsbF9oaWVyYXJjaHkucG5nIiB0b29sdGlwPSIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuY2FsbGhpZXJhcmNoeS5DYWxsSGllcmFyY2h5Vmlld1BhcnQiLz4KKyAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im1lbWVudG8iIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8+JiN4RDsmI3hBOyZsdDt2aWV3IHNlYXJjaF9zY29wZV90eXBlPSZxdW90OzEmcXVvdDsvPiIvPgorICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICA8bWVudXMgeG1pOmlkPSJfcFJCbHdETC1FZXk0aGJwWmdpZC1mdyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuY2FsbGhpZXJhcmNoeS52aWV3Ij4KKyAgICAgICAgPHRhZ3M+Vmlld01lbnU8L3RhZ3M+CisgICAgICAgIDx0YWdzPm1lbnVDb250cmlidXRpb246bWVudTwvdGFncz4KKyAgICAgIDwvbWVudXM+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9wUkJsd1RMLUVleTRoYnBaZ2lkLWZ3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5jYWxsaGllcmFyY2h5LnZpZXciIHZpc2libGU9ImZhbHNlIi8+CisgICAgPC9zaGFyZWRFbGVtZW50cz4KKyAgICA8dHJpbUJhcnMgeG1pOmlkPSJfQUc5Q3N5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5tYWluLnRvb2xiYXIiPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUN0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZ3JvdXAuZmlsZSIgdG9CZVJlbmRlcmVkPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPnRvb2xiYXJTZXBhcmF0b3I8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyU2VwYXJhdG9yIiB4bWk6aWQ9Il9BRzlDdFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLmZpbGUiIHRvQmVSZW5kZXJlZD0iZmFsc2UiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5Q3RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2guZmlsZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRUb29sSXRlbSIgeG1pOmlkPSJfc0FDZGNFRm5FZXlmSnFHbmlMT3JvUSIgZWxlbWVudElkPSJwcmludCIgdmlzaWJsZT0iZmFsc2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkvaWNvbnMvZnVsbC9ldG9vbDE2L3ByaW50X2VkaXQucG5nIiB0b29sdGlwPSJQcmludCIgY29tbWFuZD0iX0FIQXVmaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5Q3hDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5lZGl0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIj4KKyAgICAgICAgPHRhZ3M+dG9vbGJhclNlcGFyYXRvcjwvdGFncz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXJTZXBhcmF0b3IiIHhtaTppZD0iX0FHOUN4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZ3JvdXAuZWRpdCIgdG9CZVJlbmRlcmVkPSJmYWxzZSIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlDeGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC5lZGl0IiB2aXNpYmxlPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5Q3lpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJhZGRpdGlvbnMiIHRvQmVSZW5kZXJlZD0iZmFsc2UiPgorICAgICAgICA8dGFncz50b29sYmFyU2VwYXJhdG9yPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhclNlcGFyYXRvciIgeG1pOmlkPSJfQUc5Q3l5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJhZGRpdGlvbnMiIHRvQmVSZW5kZXJlZD0iZmFsc2UiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5Qzl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldCI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5Q19DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOURBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJlZU1haW5BY3Rpb25TZXQiIHZpc2libGU9ImZhbHNlIj4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlEQXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQiPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOURDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5wcmVzZW50YXRpb24iPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX0FHOURDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiIHZpc2libGU9ImZhbHNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IvaWNvbnMvZnVsbC9ldG9vbDE2L21hcmtfb2NjdXJyZW5jZXMucG5nIiBzZWxlY3RlZD0idHJ1ZSIgdHlwZT0iQ2hlY2siIGNvbW1hbmQ9Il9BSEF1dnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJJSWRlbnRpZmllciIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3Ivb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiLz4KKyAgICAgICAgICA8dmlzaWJsZVdoZW4geHNpOnR5cGU9InVpOkNvcmVFeHByZXNzaW9uIiB4bWk6aWQ9Il9BRzlEQ2l4UUVleW15YnpzdUw5bkJBIiBjb3JlRXhwcmVzc2lvbklkPSJwcm9ncmFtbWF0aWMudmFsdWUiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRUb29sSXRlbSIgeG1pOmlkPSJfQUc5REN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIgdmlzaWJsZT0iZmFsc2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9pY29ucy9mdWxsL2V0b29sMTYvbWFya19vY2N1cnJlbmNlcy5wbmciIHNlbGVjdGVkPSJ0cnVlIiB0eXBlPSJDaGVjayIgY29tbWFuZD0iX0FIQXV2eXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9IklJZGVudGlmaWVyIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIvPgorICAgICAgICAgIDx2aXNpYmxlV2hlbiB4c2k6dHlwZT0idWk6Q29yZUV4cHJlc3Npb24iIHhtaTppZD0iX0FHOUREQ3hRRWV5bXlienN1TDluQkEiIGNvcmVFeHByZXNzaW9uSWQ9InByb2dyYW1tYXRpYy52YWx1ZSIvPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZFRvb2xJdGVtIiB4bWk6aWQ9Il9BRzlERFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0IiB2aXNpYmxlPSJmYWxzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL2ljb25zL2Z1bGwvZXRvb2wxNi9tYXJrX29jY3VycmVuY2VzLnBuZyIgc2VsZWN0ZWQ9InRydWUiIHR5cGU9IkNoZWNrIiBjb21tYW5kPSJfQUhBdXZ5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iSUlkZW50aWZpZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0Ii8+CisgICAgICAgICAgPHZpc2libGVXaGVuIHhzaTp0eXBlPSJ1aTpDb3JlRXhwcmVzc2lvbiIgeG1pOmlkPSJfQUc5RERpeFFFZXlteWJ6c3VMOW5CQSIgY29yZUV4cHJlc3Npb25JZD0icHJvZ3JhbW1hdGljLnZhbHVlIi8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX0FHOUREeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiIHZpc2libGU9ImZhbHNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IvaWNvbnMvZnVsbC9ldG9vbDE2L21hcmtfb2NjdXJyZW5jZXMucG5nIiBzZWxlY3RlZD0idHJ1ZSIgdHlwZT0iQ2hlY2siIGNvbW1hbmQ9Il9BSEF1dnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJJSWRlbnRpZmllciIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3Ivb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiLz4KKyAgICAgICAgICA8dmlzaWJsZVdoZW4geHNpOnR5cGU9InVpOkNvcmVFeHByZXNzaW9uIiB4bWk6aWQ9Il9BRzlERUN4UUVleW15YnpzdUw5bkJBIiBjb3JlRXhwcmVzc2lvbklkPSJwcm9ncmFtbWF0aWMudmFsdWUiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRUb29sSXRlbSIgeG1pOmlkPSJfQUc5REVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIgdmlzaWJsZT0iZmFsc2UiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9pY29ucy9mdWxsL2V0b29sMTYvbWFya19vY2N1cnJlbmNlcy5wbmciIHNlbGVjdGVkPSJ0cnVlIiB0eXBlPSJDaGVjayIgY29tbWFuZD0iX0FIQXV2eXhRRWV5bXlienN1TDluQkEiPgorICAgICAgICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9IklJZGVudGlmaWVyIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yLnRvZ2dsZWhpZ2hsaWdodCIvPgorICAgICAgICAgIDx2aXNpYmxlV2hlbiB4c2k6dHlwZT0idWk6Q29yZUV4cHJlc3Npb24iIHhtaTppZD0iX0FHOURFaXhRRWV5bXlienN1TDluQkEiIGNvcmVFeHByZXNzaW9uSWQ9InByb2dyYW1tYXRpYy52YWx1ZSIvPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZFRvb2xJdGVtIiB4bWk6aWQ9Il9BRzlERXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0IiB2aXNpYmxlPSJmYWxzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL2ljb25zL2Z1bGwvZXRvb2wxNi9tYXJrX29jY3VycmVuY2VzLnBuZyIgc2VsZWN0ZWQ9InRydWUiIHR5cGU9IkNoZWNrIiBjb21tYW5kPSJfQUhBdXZ5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0iSUlkZW50aWZpZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5nZW5lcmljZWRpdG9yL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IudG9nZ2xlaGlnaGxpZ2h0Ii8+CisgICAgICAgICAgPHZpc2libGVXaGVuIHhzaTp0eXBlPSJ1aTpDb3JlRXhwcmVzc2lvbiIgeG1pOmlkPSJfQUc5REZDeFFFZXlteWJ6c3VMOW5CQSIgY29yZUV4cHJlc3Npb25JZD0icHJvZ3JhbW1hdGljLnZhbHVlIi8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpIYW5kbGVkVG9vbEl0ZW0iIHhtaTppZD0iX0FHOURGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiIHZpc2libGU9ImZhbHNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IvaWNvbnMvZnVsbC9ldG9vbDE2L21hcmtfb2NjdXJyZW5jZXMucG5nIiBzZWxlY3RlZD0idHJ1ZSIgdHlwZT0iQ2hlY2siIGNvbW1hbmQ9Il9BSEF1dnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgICAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJJSWRlbnRpZmllciIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3Ivb3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiLz4KKyAgICAgICAgICA8dmlzaWJsZVdoZW4geHNpOnR5cGU9InVpOkNvcmVFeHByZXNzaW9uIiB4bWk6aWQ9Il9BRzlERml4UUVleW15YnpzdUw5bkJBIiBjb3JlRXhwcmVzc2lvbklkPSJwcm9ncmFtbWF0aWMudmFsdWUiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5REh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndlYmJyb3dzZXIuYWN0aW9uU2V0IiB2aXNpYmxlPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhciIgeG1pOmlkPSJfQUc5RElDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIiIHZpc2libGU9ImZhbHNlIj4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlESVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLm5hdiIgdG9CZVJlbmRlcmVkPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPnRvb2xiYXJTZXBhcmF0b3I8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyU2VwYXJhdG9yIiB4bWk6aWQ9Il9BRzlESWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLm5hdiIgdG9CZVJlbmRlcmVkPSJmYWxzZSIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlESXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC5uYXZpZ2F0ZSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRUb29sSXRlbSIgeG1pOmlkPSJfc0FMbmFVRm5FZXlmSnFHbmlMT3JvUSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucGluRWRpdG9yIiB2aXNpYmxlPSJmYWxzZSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS9pY29ucy9mdWxsL2V0b29sMTYvcGluX2VkaXRvci5wbmciIHRvb2x0aXA9IlBpbiBFZGl0b3IiIHR5cGU9IkNoZWNrIiBjb21tYW5kPSJfQUhBdUh5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlETUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLmVkaXRvciIgdG9CZVJlbmRlcmVkPSJmYWxzZSI+CisgICAgICAgIDx0YWdzPnRvb2xiYXJTZXBhcmF0b3I8L3RhZ3M+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyU2VwYXJhdG9yIiB4bWk6aWQ9Il9BRzlETVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLmVkaXRvciIgdG9CZVJlbmRlcmVkPSJmYWxzZSIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQmFyIiB4bWk6aWQ9Il9BRzlETWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Imdyb3VwLmhlbHAiIHRvQmVSZW5kZXJlZD0iZmFsc2UiPgorICAgICAgICA8dGFncz50b29sYmFyU2VwYXJhdG9yPC90YWdzPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbEJhclNlcGFyYXRvciIgeG1pOmlkPSJfQUc5RE15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJncm91cC5oZWxwIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xCYXIiIHhtaTppZD0iX0FHOUROQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLmhlbHAiIHZpc2libGU9ImZhbHNlIj4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfQUc5RE55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJQZXJzcGVjdGl2ZVNwYWNlciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkxheW91dE1vZGlmaWVyVG9vbENvbnRyb2wiPgorICAgICAgICA8dGFncz5zdHJldGNoPC90YWdzPgorICAgICAgICA8dGFncz5TSE9XX1JFU1RPUkVfTUVOVTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iUGVyc3BlY3RpdmVTd2l0Y2hlciIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnBlcnNwZWN0aXZlc3dpdGNoZXIuUGVyc3BlY3RpdmVTd2l0Y2hlciI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgICAgPHRhZ3M+SElERUFCTEU8L3RhZ3M+CisgICAgICAgIDx0YWdzPlNIT1dfUkVTVE9SRV9NRU5VPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICA8L3RyaW1CYXJzPgorICAgIDx0cmltQmFycyB4bWk6aWQ9Il9BRzlEUWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRyaW0uc3RhdHVzIiBzaWRlPSJCb3R0b20iPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEUXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLlN0YXR1c0xpbmUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuU3RhbmRhcmRUcmltIj4KKyAgICAgICAgPHRhZ3M+c3RyZXRjaDwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURSQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuSGVhcFN0YXR1cyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5TdGFuZGFyZFRyaW0iPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEUlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLlByb2dyZXNzQmFyIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLlN0YW5kYXJkVHJpbSI+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC90cmltQmFycz4KKyAgICA8dHJpbUJhcnMgeG1pOmlkPSJfQUc5RFVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS50cmltLnZlcnRpY2FsMSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgc2lkZT0iTGVmdCI+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLnBlcnNwZWN0aXZlc3RhY2sobWluaW1pemVkKSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMubWlubWF4LlRyaW1TdGFjayI+CisgICAgICAgIDx0YWdzPlRyaW1TdGFjazwvdGFncz4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfQUc5RFV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJsZWZ0KElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmUpIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5taW5tYXguVHJpbVN0YWNrIj4KKyAgICAgICAgPHRhZ3M+VHJpbVN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEVkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRvcExlZnQoSURFV2luZG93KS4ob3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlKSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMubWlubWF4LlRyaW1TdGFjayI+CisgICAgICAgIDx0YWdzPlRyaW1TdGFjazwvdGFncz4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICA8L3RyaW1CYXJzPgorICAgIDx0cmltQmFycyB4bWk6aWQ9Il9BRzlEVlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnRyaW0udmVydGljYWwyIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBzaWRlPSJSaWdodCI+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURWaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3NNU3RhY2soSURFV2luZG93KS4ob3JnLmVjbGlwc2UuamR0LnVpLkphdmFQZXJzcGVjdGl2ZSkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLm1pbm1heC5UcmltU3RhY2siPgorICAgICAgICA8dGFncz5UcmltU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURWeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icmlnaHQoSURFV2luZG93KS4ob3JnLmVjbGlwc2UuamR0LnVpLkphdmFQZXJzcGVjdGl2ZSkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLm1pbm1heC5UcmltU3RhY2siPgorICAgICAgICA8dGFncz5UcmltU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURXQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYm90dG9tKElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmUpIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5taW5tYXguVHJpbVN0YWNrIj4KKyAgICAgICAgPHRhZ3M+VHJpbVN0YWNrPC90YWdzPgorICAgICAgICA8dGFncz5EcmFnZ2FibGU8L3RhZ3M+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il9BRzlEV1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRvcFJpZ2h0KElERVdpbmRvdykuKG9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyRUVQZXJzcGVjdGl2ZSkiIHRvQmVSZW5kZXJlZD0iZmFsc2UiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLm1pbm1heC5UcmltU3RhY2siPgorICAgICAgICA8dGFncz5UcmltU3RhY2s8L3RhZ3M+CisgICAgICAgIDx0YWdzPkRyYWdnYWJsZTwvdGFncz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iX0FHOURXaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iYm90dG9tUmlnaHQoSURFV2luZG93KS4ob3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlKSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMubWlubWF4LlRyaW1TdGFjayI+CisgICAgICAgIDx0YWdzPlRyaW1TdGFjazwvdGFncz4KKyAgICAgICAgPHRhZ3M+RHJhZ2dhYmxlPC90YWdzPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICA8L3RyaW1CYXJzPgorICA8L2NoaWxkcmVuPgorICA8aGFuZGxlcnMgeG1pOmlkPSJfQUc5RFd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuaGFuZGxlci5wb2xsTmV3c0ZlZWRzIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3Avb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm5ld3MucmNwLnBvbGwuUG9sbE5ld3NGZWVkc0hhbmRsZXIiIGNvbW1hbmQ9Il9BSEJVRnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxoYW5kbGVycyB4bWk6aWQ9Il9BRzlEWEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcC5oYW5kbGVyLnJlYWROZXdzSXRlbXMiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcCIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcC9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubmV3cy5yY3AucmVhZC5SZWFkTmV3c0l0ZW1zSGFuZGxlciIgY29tbWFuZD0iX0FIQlVHQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5RFhTeFFFZXlteWJ6c3VMOW5CQSIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGJpbmRpbmdDb250ZXh0PSJfQUctUVJDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURYaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrRjExIiBjb21tYW5kPSJfQUhBRnhDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8dGFncz5wbGF0Zm9ybTp3aW4zMjwvdGFncz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrSU5TRVJUIiBjb21tYW5kPSJfQUdfZ1FDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1BBR0VfVVAiIGNvbW1hbmQ9Il9BSEF0RWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURZU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrUEFHRV9ET1dOIiBjb21tYW5kPSJfQUhBdDRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrREVMIiBjb21tYW5kPSJfQUhBR2ZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEWXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtTUEFDRSIgY29tbWFuZD0iX0FIQUdVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RFpDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU1BBQ0UiIGNvbW1hbmQ9Il9BSEF1UkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURaU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0EiIGNvbW1hbmQ9Il9BSEFzMFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURaaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0MiIGNvbW1hbmQ9Il9BSEF0UFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURaeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzEiIGNvbW1hbmQ9Il9BSEFHS0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURhQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0kiIGNvbW1hbmQ9Il9BSEFHQ1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURhU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0wiIGNvbW1hbmQ9Il9BSEF1dml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURhaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0QiIGNvbW1hbmQ9Il9BSEF1N2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURheXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1giIGNvbW1hbmQ9Il9BSEFHZlN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURiQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1kiIGNvbW1hbmQ9Il9BSEF0QWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURiU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1oiIGNvbW1hbmQ9Il9BSEFHZFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURiaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1YiIGNvbW1hbmQ9Il9BR19nUUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURieXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0lOU0VSVCIgY29tbWFuZD0iX0FIQXRQU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGNDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtGMyIgY29tbWFuZD0iX0FIQXVpU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGNTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjEwIiBjb21tYW5kPSJfQUhBRm1DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOURjaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudGV4dEVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFTU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEY3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRU5EIiBjb21tYW5kPSJfQUhBdXBDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iSU5TRVJUIiBjb21tYW5kPSJfQUhBdGdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjIiIGNvbW1hbmQ9Il9BSEFHTXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURkaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJIT01FIiBjb21tYW5kPSJfQUhBdTBDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrRU5EIiBjb21tYW5kPSJfQUhBc3RDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrSE9NRSIgY29tbWFuZD0iX0FIQXNqaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGVTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtBUlJPV19VUCIgY29tbWFuZD0iX0FIQXZNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGVpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBdDdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEZXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtCUyIgY29tbWFuZD0iX0FHX2ZfeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGZDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrKyIgY29tbWFuZD0iX0FIQXR0aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGZTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrLSIgY29tbWFuZD0iX0FIQXNweXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGZpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQ1IiIGNvbW1hbmQ9Il9BSEF1aUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURmeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0oiIGNvbW1hbmQ9Il9BSEFGb0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURnQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0siIGNvbW1hbmQ9Il9BSEF0Mml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURnU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0wiIGNvbW1hbmQ9Il9BSEF1WFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURnaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0QiIGNvbW1hbmQ9Il9BSEFGc1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURneXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1giIGNvbW1hbmQ9Il9BSEF0Uml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURoQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1kiIGNvbW1hbmQ9Il9BSEFzb1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURoU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKz0iIGNvbW1hbmQ9Il9BSEF0dGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURoaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrLyIgY29tbWFuZD0iX0FIQXUxU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGh5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrUSIgY29tbWFuZD0iX0FIQUdFU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGlDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBIiBjb21tYW5kPSJfQUhBdFlDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEaVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1kiIGNvbW1hbmQ9Il9BR19mOWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURpaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0oiIGNvbW1hbmQ9Il9BSEFHQWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURpeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0siIGNvbW1hbmQ9Il9BSEFGMVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURqQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJTSElGVCtDUiIgY29tbWFuZD0iX0FIQXV6aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGpTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0oiIGNvbW1hbmQ9Il9BSEFHSHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURqaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0RFTCIgY29tbWFuZD0iX0FIQUdiaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGp5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrREVMIiBjb21tYW5kPSJfQUhBdVN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEa0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtFTkQiIGNvbW1hbmQ9Il9BSEF0OGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURrU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK05VTVBBRF9NVUxUSVBMWSIgY29tbWFuZD0iX0FIQXVFQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGtpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTlVNUEFEX0RJVklERSIgY29tbWFuZD0iX0FIQXRneXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RGt5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEFGMml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURsQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEF2U0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURsU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0FSUk9XX0xFRlQiIGNvbW1hbmQ9Il9BSEF0Tnl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURsaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0FSUk9XX1JJR0hUIiBjb21tYW5kPSJfQUhBR0RpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtIT01FIiBjb21tYW5kPSJfQUdfZ1BpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtJTlNFUlQiIGNvbW1hbmQ9Il9BSEFGOEN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOURtU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK05VTVBBRF9NVUxUSVBMWSIgY29tbWFuZD0iX0FIQXVCU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG1peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrTlVNUEFEX0FERCIgY29tbWFuZD0iX0FIQXU4eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG15eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrTlVNUEFEX1NVQlRSQUNUIiBjb21tYW5kPSJfQUhBdWhpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtOVU1QQURfRElWSURFIiBjb21tYW5kPSJfQUhBRjN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEblN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtBUlJPV19MRUZUIiBjb21tYW5kPSJfQUhBc3VDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEbml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtBUlJPV19SSUdIVCIgY29tbWFuZD0iX0FIQUY5aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG55eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdkJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEb0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQXMzQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5RG9TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjEwIiBjb21tYW5kPSJfQUhBdWd5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlEb2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrU1BBQ0UiIGNvbW1hbmQ9Il9BSEJVQml4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5RG95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy50YXNrcyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZVN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE1DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IklOU0VSVCIgY29tbWFuZD0iX0FIQXNuaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE1TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY0IiBjb21tYW5kPSJfQUhBRmt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwTWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrSU5TRVJUIiBjb21tYW5kPSJfQUhBRnlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwTXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdHl5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwTkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFHWml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBOU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0NSIiBjb21tYW5kPSJfQUhBR1lDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwTml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0kiIGNvbW1hbmQ9Il9BSEFzcUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBOeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQyIgY29tbWFuZD0iX0FIQXRJQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cE9DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtSIiBjb21tYW5kPSJfQUhBc3RpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwT1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1UiIGNvbW1hbmQ9Il9BSEF0X3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBPaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEF1Tnl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBPeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQXNzQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlwUEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmludGVybmFsLndpa2l0ZXh0LnVpLmVkaXRvci5iYXNpY01hcmt1cFNvdXJjZUNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUVp5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBQU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGMSIgY29tbWFuZD0iX0FHX2dEeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlwUGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzLndpbmRvdyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RUlN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFB5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkYyIiBjb21tYW5kPSJfQUhBRmVDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwUUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjMiIGNvbW1hbmQ9Il9BSEFHSVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBRU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNCIgY29tbWFuZD0iX0FIQUZnaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFFpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY1IiBjb21tYW5kPSJfQUhBc2hpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwUXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0Y3IiBjb21tYW5kPSJfQUhBdGFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwUkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrRjIiIGNvbW1hbmQ9Il9BSEF0bHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBSU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJTSElGVCtGNSIgY29tbWFuZD0iX0FIQXM0U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFJpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtGNSIgY29tbWFuZD0iX0FIQXN4eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFJ5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtBUlJPV19MRUZUIiBjb21tYW5kPSJfQUhBRm5DeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwU0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjExIiBjb21tYW5kPSJfQUhBdTRTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwU1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0FSUk9XX1JJR0hUIiBjb21tYW5kPSJfQUhBR2tpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwU2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjEyIiBjb21tYW5kPSJfQUhBdVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwU3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iREVMIiBjb21tYW5kPSJfQUhBRnp5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrWCBHIiBjb21tYW5kPSJfQUhBdTNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1ggQSIgY29tbWFuZD0iX0FIQUZjeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFRpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtYIFEiIGNvbW1hbmQ9Il9BSEFHQml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBUeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrWCBUIiBjb21tYW5kPSJfQUhBc3ppeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1ggSiIgY29tbWFuZD0iX0FIQXQ1U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFVTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtYIE0iIGNvbW1hbmQ9Il9BSEFzMkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBVaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKysiIGNvbW1hbmQ9Il9BSEFzZ0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDx0YWdzPmxvY2FsZTpkZTwvdGFncz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCssIiBjb21tYW5kPSJfQUhBRmRTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCstIiBjb21tYW5kPSJfQUhBdXdTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsuIiBjb21tYW5kPSJfQUhBdkN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsjIiBjb21tYW5kPSJfQUhBRm1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwVnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtIIiBjb21tYW5kPSJfQUhBdVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwV0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0QgSiIgY29tbWFuZD0iX0FIQXVGaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFdTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrTSIgY29tbWFuZD0iX0FIQXVQeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFdpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtEIFEiIGNvbW1hbmQ9Il9BSEFzNkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBXeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK04iIGNvbW1hbmQ9Il9BSEF2Sml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBYQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtQIiBjb21tYW5kPSJfQUhBRnh5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtCIiBjb21tYW5kPSJfQUhBRmVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtFIiBjb21tYW5kPSJfQUhBR2JDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGIiBjb21tYW5kPSJfQUhBRnZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtHIiBjb21tYW5kPSJfQUdfZ0FDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0giIGNvbW1hbmQ9Il9BSEFHWkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBZaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrSSIgY29tbWFuZD0iX0FIQUZtaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFl5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtKIiBjb21tYW5kPSJfQUhBR2FDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwWkN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0wiIGNvbW1hbmQ9Il9BSEFHSXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBaU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrLSIgY29tbWFuZD0iX0FIQXRVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFppeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrPSIgY29tbWFuZD0iX0FIQXNnQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cFp5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtNIiBjb21tYW5kPSJfQUhBdTlDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK04iIGNvbW1hbmQ9Il9BSEFHZGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBhU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1IiIGNvbW1hbmQ9Il9BSEF2VGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBhaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRCBUIiBjb21tYW5kPSJfQUdfZ0RpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwYXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0MiIGNvbW1hbmQ9Il9BSEF1U2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBiQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1MiIGNvbW1hbmQ9Il9BSEF0cUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBiU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzMiIGNvbW1hbmQ9Il9BSEFHTWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBiaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1QiIGNvbW1hbmQ9Il9BSEFHZkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBieXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1UiIGNvbW1hbmQ9Il9BSEFGN2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBjQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRiIgY29tbWFuZD0iX0FIQXVsQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGNTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrViIgY29tbWFuZD0iX0FIQXVyQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGNpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrVyIgY29tbWFuZD0iX0FIQUdleXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGN5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrSCIgY29tbWFuZD0iX0FIQXRMeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGRDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtaIiBjb21tYW5kPSJfQUhBdEtpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtOIiBjb21tYW5kPSJfQUhBdFVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtPIiBjb21tYW5kPSJfQUhBdTZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1AiIGNvbW1hbmQ9Il9BSEF0eGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBlQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0IiIGNvbW1hbmQ9Il9BSEFGMWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBlU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUiIgY29tbWFuZD0iX0FIQXRCeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGVpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtTIiBjb21tYW5kPSJfQUhBdElpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1QiIGNvbW1hbmQ9Il9BSEF0WWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBmQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0UiIGNvbW1hbmQ9Il9BSEFGNkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBmU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrViIgY29tbWFuZD0iX0FIQXN0eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGZpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRyIgY29tbWFuZD0iX0FIQXZJU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGZ5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtXIiBjb21tYW5kPSJfQUhBdkJTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwZ0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrSCIgY29tbWFuZD0iX0FIQUZqQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGdTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDUiIgY29tbWFuZD0iX0FIQXVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGdpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtEIEEiIGNvbW1hbmQ9Il9BSEF1WUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBneXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK18iIGNvbW1hbmQ9Il9BSEFHVlN4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBoQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iU3BsaXR0ZXIuaXNIb3Jpem9udGFsIiBuYW1lPSJTcGxpdHRlci5pc0hvcml6b250YWwiIHZhbHVlPSJ0cnVlIi8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGhTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrUCIgY29tbWFuZD0iX0FIQXVmaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGhpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrUSIgY29tbWFuZD0iX0FIQXVqeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGh5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0IiIGNvbW1hbmQ9Il9BSEF0MWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBpQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1MiIGNvbW1hbmQ9Il9BSEFzcVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBpU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1UiIGNvbW1hbmQ9Il9BSEFzLVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBpaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtHIiBjb21tYW5kPSJfQUhBdHZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwaXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtXIiBjb21tYW5kPSJfQUhBdERTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwakN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCt7IiBjb21tYW5kPSJfQUhBR1ZTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwalN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IlNwbGl0dGVyLmlzSG9yaXpvbnRhbCIgbmFtZT0iU3BsaXR0ZXIuaXNIb3Jpem9udGFsIiB2YWx1ZT0iZmFsc2UiLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwaml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UgTCIgY29tbWFuZD0iX0FIQUZkaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGp5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtFIE4iIGNvbW1hbmQ9Il9BSEF2RXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBrQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSBQIiBjb21tYW5kPSJfQUdfZl9DeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwa1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UgUiIgY29tbWFuZD0iX0FIQUdGQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGtpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtFIEUiIGNvbW1hbmQ9Il9BSEFGbml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBreXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSBHIiBjb21tYW5kPSJfQUhBR2d5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwbEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0UgSiIgY29tbWFuZD0iX0FHX2dQeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cGxTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtFIFQiIGNvbW1hbmQ9Il9BSEFGbFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBsaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSBTIiBjb21tYW5kPSJfQUhBczBpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwbHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgSCIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cG1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLnZpZXdzLkNoZWF0U2hlZXRWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cG1TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEoiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YWRvY1ZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwbXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgTCIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cG5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwblN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgSyIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cG5peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIi8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cG55eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK1NISUZUK0FSUk9XX1VQIiBjb21tYW5kPSJfQUhBdGtpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwb0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgQiIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cG9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3Ii8+CisgICAgPC9iaW5kaW5ncz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cG9peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEF2TGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBveXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtTSElGVCtBUlJPV19SSUdIVCIgY29tbWFuZD0iX0FIQXRmQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHBDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIEQiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkuU291cmNlVmlldyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBwaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBDIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwcHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBxQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtTSElGVCtGMTIiIGNvbW1hbmQ9Il9BSEF1OWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBxU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK05VTVBBRF9NVUxUSVBMWSIgY29tbWFuZD0iX0FIQXRweXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHFpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjQiIGNvbW1hbmQ9Il9BSEF0RFN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBxeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0Y2IiBjb21tYW5kPSJfQUhBRnlDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwckN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtOVU1QQURfRElWSURFIiBjb21tYW5kPSJfQUhBR1Z5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwclN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGNyIgY29tbWFuZD0iX0FIQXU1Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHJpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRjgiIGNvbW1hbmQ9Il9BSEFHVkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXByeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0Y5IiBjb21tYW5kPSJfQUhBc3hDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwc0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGMTEiIGNvbW1hbmQ9Il9BSEF0Sml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXBzU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0YxMiIgY29tbWFuZD0iX0FHX2dIaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHNpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIFgiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXBzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB0Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBaIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwdFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UudGVhbS51aS5HZW5lcmljSGlzdG9yeVZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgWSIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnRlYW0uc3luYy52aWV3cy5TeW5jaHJvbml6ZVZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdUN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGNCIgY29tbWFuZD0iX0FIQUdleXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHVTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRjYiIGNvbW1hbmQ9Il9BSEF0c3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB1aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRjciIGNvbW1hbmQ9Il9BSEF0OUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB1eXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBQIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwdkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3JlciIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB2U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBPIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwdml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwdnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgUSIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHdDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIFQiIGNvbW1hbmQ9Il9BSEF0eml4UUVleW15YnpzdUw5bkJBIj4KKyAgICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHOXB3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB3aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBTIiBjb21tYW5kPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BRzlwd3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgbmFtZT0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciLz4KKyAgICA8L2JpbmRpbmdzPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlweEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgViIgY29tbWFuZD0iX0FIQXR6aXhRRWV5bXlienN1TDluQkEiPgorICAgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUc5cHhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy52aWV3SWQiIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyIvPgorICAgIDwvYmluZGluZ3M+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB4aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0Y3IiBjb21tYW5kPSJfQUhBdFBpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlweHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGOCIgY29tbWFuZD0iX0FIQUdLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHlDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjkiIGNvbW1hbmQ9Il9BSEFGN0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB5U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0YxMSIgY29tbWFuZD0iX0FIQXVxaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHlpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjEyIiBjb21tYW5kPSJfQUhBRjJTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlweXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1ggUiIgY29tbWFuZD0iX0FIQXRBQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHpDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtEIFIiIGNvbW1hbmQ9Il9BSEF0QXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cHpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50RWRpdG9yU2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUVlTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXB6aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGMyIgY29tbWFuZD0iX0FHX2dFU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cHp5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IlNISUZUK0YyIiBjb21tYW5kPSJfQUhBdGNpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK08iIGNvbW1hbmQ9Il9BR19nQ2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAwU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUiIgY29tbWFuZD0iX0FIQUZnU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDBpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRiIgY29tbWFuZD0iX0FIQXV6U3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlwMHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IuZ2VuZXJpY0VkaXRvckNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUVpDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAxQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGMyIgY29tbWFuZD0iX0FIQXVrQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDFTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRyIgY29tbWFuZD0iX0FIQXVveXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlwMWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmphdmFzY3JpcHRWaWV3U2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUVN5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAxeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGMyIgY29tbWFuZD0iX0FIQXQtU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDJDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY0IiBjb21tYW5kPSJfQUhBczRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwMlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iU0hJRlQrRjIiIGNvbW1hbmQ9Il9BSEF1VXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAyaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0ciIGNvbW1hbmQ9Il9BSEF0M0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAyeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrSSIgY29tbWFuZD0iX0FIQXRieXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDNDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtKIiBjb21tYW5kPSJfQUhBdGt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwM1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0wiIGNvbW1hbmQ9Il9BSEFzN3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAzaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrTSIgY29tbWFuZD0iX0FIQXVwaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDN5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtDIiBjb21tYW5kPSJfQUhBR1JpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNEN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtVIiBjb21tYW5kPSJfQUhBR0RTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtIIiBjb21tYW5kPSJfQUhBdlN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1oiIGNvbW1hbmQ9Il9BSEFzeGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA0eXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK08iIGNvbW1hbmQ9Il9BSEFGc2l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA1Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUiIgY29tbWFuZD0iX0FIQXRyU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDVTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtTIiBjb21tYW5kPSJfQUhBdG95eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1QiIGNvbW1hbmQ9Il9BSEFGMUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA1eXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrViIgY29tbWFuZD0iX0FIQUdFQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDZDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRyIgY29tbWFuZD0iX0FIQXRaU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDZTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK0giIGNvbW1hbmQ9Il9BSEF1T0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA2aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBKIiBjb21tYW5kPSJfQUhBdXVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwNnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1EgRCIgY29tbWFuZD0iX0FIQXQ3aXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cDdDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtRIFAiIGNvbW1hbmQ9Il9BSEF0dUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA3U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUSBUIiBjb21tYW5kPSJfQUhBdGp5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXA3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHJ1Y3R1cmVkVGV4dEVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFUeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwN3l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjMiIGNvbW1hbmQ9Il9BSEF0WGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA4Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKy8iIGNvbW1hbmQ9Il9BSEF0VUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA4U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0kiIGNvbW1hbmQ9Il9BSEF1Z1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA4aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK08iIGNvbW1hbmQ9Il9BSEF0Yml4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA4eXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1wiIGNvbW1hbmQ9Il9BSEF0d1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA5Q3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1AiIGNvbW1hbmQ9Il9BSEF0WVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA5U3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0EiIGNvbW1hbmQ9Il9BSEF2U1N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA5aXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0MiIGNvbW1hbmQ9Il9BSEF1eXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXA5eXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0YiIGNvbW1hbmQ9Il9BSEF2SWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAtQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKz4iIGNvbW1hbmQ9Il9BSEF1WVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAtU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEF0NkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXAtaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQXVBU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cC15eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19MRUZUIiBjb21tYW5kPSJfQUhBRmlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwX0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX1JJR0hUIiBjb21tYW5kPSJfQUhBdG1peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlwX1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtBUlJPV19VUCIgY29tbWFuZD0iX0FIQUdBQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cF9peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQXM3aXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlwX3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5jb250ZXh0cy50YXNrdmlldyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZWl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUFDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY1IiBjb21tYW5kPSJfQUhBdXlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFBU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWdnaW5nIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFjeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxQWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjUiIGNvbW1hbmQ9Il9BSEFGaHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFBeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJGNiIgY29tbWFuZD0iX0FIQXN2Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUJDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkY3IiBjb21tYW5kPSJfQUhBdkZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxQlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iRjgiIGNvbW1hbmQ9Il9BSEF0ZWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFCaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1IiIGNvbW1hbmQ9Il9BSEF0UVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFCeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0YyIiBjb21tYW5kPSJfQUhBdVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxQ0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGNSIgY29tbWFuZD0iX0FIQXUyeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUNTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrMyIgY29tbWFuZD0iX0FIQUZneXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxQ2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLkVkaXRDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cUN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuU1FMRWRpdG9yU2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUVRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxREN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLlRlcm1pbmFsQ29udGV4dCIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFEU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5LmFic3RyYWN0YXN5bmN0YWJsZXJlbmRlcmluZyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZEN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cURpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrLCIgY29tbWFuZD0iX0FIQXVreXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUR5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrLiIgY29tbWFuZD0iX0FIQXVQU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUVDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRyIgY29tbWFuZD0iX0FIQXVQaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxRVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxRWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NSIiBjb21tYW5kPSJfQUhBdExpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxRXl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtDUiIgY29tbWFuZD0iX0FIQUZsQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxRkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5qYXZhRWRpdG9yU2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUVRpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFGU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUKy8iIGNvbW1hbmQ9Il9BSEFzLWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFGaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKy8iIGNvbW1hbmQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFGeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK0kiIGNvbW1hbmQ9Il9BSEFHa0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFHQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK08iIGNvbW1hbmQ9Il9BSEFzMHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFHU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1wiIGNvbW1hbmQ9Il9BSEFGc3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFHaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrTyIgY29tbWFuZD0iX0FIQUdjQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUd5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrUCIgY29tbWFuZD0iX0FIQXQ4eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUhDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtCIiBjb21tYW5kPSJfQUhBdk5peFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxSFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIFIiIGNvbW1hbmQ9Il9BSEF1TWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFIaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzciIGNvbW1hbmQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFIeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK00iIGNvbW1hbmQ9Il9BSEFHTkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFJQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0MiIGNvbW1hbmQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFJU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrVSIgY29tbWFuZD0iX0FIQXVIU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUlpeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrRiIgY29tbWFuZD0iX0FIQXV6U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUl5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrVCIgY29tbWFuZD0iX0FIQXRYeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUpDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrRjMiIGNvbW1hbmQ9Il9BSEF2Q0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFKU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEFzNXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFKaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfRE9XTiIgY29tbWFuZD0iX0FIQUYyeXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUp5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19MRUZUIiBjb21tYW5kPSJfQUhBc2hDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxS0N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX1JJR0hUIiBjb21tYW5kPSJfQUhBRnJTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxS1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIE0iIGNvbW1hbmQ9Il9BSEFzaVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFLaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzIgTCIgY29tbWFuZD0iX0FIQUZwQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUt5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEF0RHl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFMQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFzMVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFMU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzIgRiIgY29tbWFuZD0iX0FIQXU4aXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxTGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmphdmFFZGl0b3JTY29wZSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RU2l4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cUx5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrLyIgY29tbWFuZD0iX0FIQXM3U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU1DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrLyIgY29tbWFuZD0iX0FIQXRleXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU1TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrSSIgY29tbWFuZD0iX0FIQXN1U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU1peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrTyIgY29tbWFuZD0iX0FHX2dKaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU15eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrXCIgY29tbWFuZD0iX0FIQUZ6U3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU5DeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtPIiBjb21tYW5kPSJfQUhBc2tDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxTlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtQIiBjb21tYW5kPSJfQUhBdHFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxTml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCsyIFIiIGNvbW1hbmQ9Il9BSEFHTnl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFOeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1QiIGNvbW1hbmQ9Il9BSEFzOEN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFPQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrRSIgY29tbWFuZD0iX0FIQXRLU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU9TeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrNyIgY29tbWFuZD0iX0FIQXRleXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU9peFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrTSIgY29tbWFuZD0iX0FIQUZqaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cU95eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQyIgY29tbWFuZD0iX0FIQXRleXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVBDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtVIiBjb21tYW5kPSJfQUhBR2VpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtGIiBjb21tYW5kPSJfQUhBRnFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtUIiBjb21tYW5kPSJfQUhBdGxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtGMyIgY29tbWFuZD0iX0FIQXRRaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVFDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19VUCIgY29tbWFuZD0iX0FIQUZmU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVFTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtBUlJPV19ET1dOIiBjb21tYW5kPSJfQUhBdUdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxUWl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0FSUk9XX0xFRlQiIGNvbW1hbmQ9Il9BSEF1enl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFReXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrQVJST1dfUklHSFQiIGNvbW1hbmQ9Il9BSEF0ekN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFSQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzIgTCIgY29tbWFuZD0iX0FIQXZDaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVJTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrU0hJRlQrQVJST1dfVVAiIGNvbW1hbmQ9Il9BSEF2VVN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFSaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0FSUk9XX0RPV04iIGNvbW1hbmQ9Il9BSEFGN3l4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFSeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzIgRiIgY29tbWFuZD0iX0FIQXNtaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxU0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5wcm9wZXJ0aWVzRWRpdG9yU2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUWFpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFTU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKy8iIGNvbW1hbmQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFTaXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzciIGNvbW1hbmQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFTeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0MiIGNvbW1hbmQ9Il9BSEF0VkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5tZW1vcnl2aWV3IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFiU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVFN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtOIiBjb21tYW5kPSJfQUhBdHVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrTSIgY29tbWFuZD0iX0FIQXN5eXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVR5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK04iIGNvbW1hbmQ9Il9BSEF1OXl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFVQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1QiIGNvbW1hbmQ9Il9BSEFHT0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFVU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1ciIGNvbW1hbmQ9Il9BSEF0aVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5lZGl0b3JzLnRhc2siIGJpbmRpbmdDb250ZXh0PSJfQUctUVppeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFVeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK08iIGNvbW1hbmQ9Il9BSEF2QUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFWQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrSSIgY29tbWFuZD0iX0FIQXNxQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVZTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtDIiBjb21tYW5kPSJfQUhBdElDeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVml4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtNIiBjb21tYW5kPSJfQUdfZ0pTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxVnl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1IiIGNvbW1hbmQ9Il9BSEFzdGl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFXQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrUyIgY29tbWFuZD0iX0FIQUdnaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVdTeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtTSElGVCtVIiBjb21tYW5kPSJfQUhBdF95eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFXaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudWkuZWRpdG9yLm1hcmt1cFNvdXJjZUNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUWFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFXeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK08iIGNvbW1hbmQ9Il9BR19nTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cVhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkucGRlRWRpdG9yQ29udGV4dCIgYmluZGluZ0NvbnRleHQ9Il9BRy1RWXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFYU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuc2VydmVyVmlld1Njb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFjaXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxWGl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrUCIgY29tbWFuZD0iX0FIQXQtaXhRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVh5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkFMVCtDVFJMK1IiIGNvbW1hbmQ9Il9BSEF2RUN4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFZQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrQ1RSTCtTIiBjb21tYW5kPSJfQUhBR0dpeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxWVN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK0NUUkwrRCIgY29tbWFuZD0iX0FIQXQzeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxWWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlldyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVl5eFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrQyIgY29tbWFuZD0iX0FIQUdRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVpDeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrViIgY29tbWFuZD0iX0FIQXRSQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxWlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVmbG9nVmlldyIgYmluZGluZ0NvbnRleHQ9Il9BRy1RZHl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8YmluZGluZ3MgeG1pOmlkPSJfQUc5cVppeFFFZXlteWJ6c3VMOW5CQSIga2V5U2VxdWVuY2U9IkNUUkwrQyIgY29tbWFuZD0iX0FIQUZ5U3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxWnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiIGJpbmRpbmdDb250ZXh0PSJfQUctUVV5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFhQ3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK1AiIGNvbW1hbmQ9Il9BSEF1U0N4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFhU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0QiIGNvbW1hbmQ9Il9BSEFzLUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY2xhc3NGaWxlRWRpdG9yU2NvcGUiIGJpbmRpbmdDb250ZXh0PSJfQUctUVRTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFheXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMKzEiIGNvbW1hbmQ9Il9BSEF2R3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuYnJlYWRjcnVtYkVkaXRvclNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFmeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxYlN4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK0IiIGNvbW1hbmQ9Il9BSEF2Tml4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5lZGl0b3JzLkpzRWRpdG9yLmNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUWZTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFieXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK0kiIGNvbW1hbmQ9Il9BSEF1X3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnN0cnVjdHVyZWQudGV4dC5lZGl0b3IuanNwLnNjb3BlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFXaXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxY1N4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtTSElGVCtNIiBjb21tYW5kPSJfQUhBR1JTeFFFZXlteWJ6c3VMOW5CQSIvPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxY2l4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQUxUK1NISUZUK1IiIGNvbW1hbmQ9Il9BSEF1LWl4UUVleW15YnpzdUw5bkJBIi8+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFjeXhRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJBTFQrU0hJRlQrViIgY29tbWFuZD0iX0FIQXMxQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPC9iaW5kaW5nVGFibGVzPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnRhc2tzLnVpLm1hcmt1cFNvdXJjZUNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUWFTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPGJpbmRpbmdzIHhtaTppZD0iX0FHOXFkU3hRRWV5bXlienN1TDluQkEiIGtleVNlcXVlbmNlPSJDVFJMK1NISUZUK08iIGNvbW1hbmQ9Il9BR19nTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDwvYmluZGluZ1RhYmxlcz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb25zb2xlIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFieXhRRWV5bXlienN1TDluQkEiPgorICAgIDxiaW5kaW5ncyB4bWk6aWQ9Il9BRzlxZHl4UUVleW15YnpzdUw5bkJBIiBrZXlTZXF1ZW5jZT0iQ1RSTCtaIiBjb21tYW5kPSJfQUhBdkFpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICA8dGFncz5wbGF0Zm9ybTp3aW4zMjwvdGFncz4KKyAgICA8L2JpbmRpbmdzPgorICA8L2JpbmRpbmdUYWJsZXM+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFlQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmpzZi5mYWNlc2NvbmZpZy5lZGl0b3JDb250ZXh0IiBiaW5kaW5nQ29udGV4dD0iX0FHLVFheXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QucGFnZWRlc2lnbmVyLmVkaXRvckNvbnRleHQiIGJpbmRpbmdDb250ZXh0PSJfQUctUVlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZWl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFoU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWV5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RaGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFmQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWh5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZlN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFpQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWZpeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RaVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFmeXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWlpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZ0N4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFpeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWdTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RakN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFnaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWpTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxZ3l4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFqaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWhDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Ranl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFoU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxaGl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFrU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWh5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Ra2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFpQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxaVN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFsQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWlpeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RbFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFpeXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUWxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxakN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFseXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWpTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RbUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFqaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxanl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFtaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWtDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RbXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFrU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW5DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxa2l4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFuU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWt5eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rbml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFsQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW55eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbFN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFvQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cWxpeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rb1N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFseXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUW9peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbUN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFveXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW1TeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RcEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFtaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXBTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbXl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFwaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW5DeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RcHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFuU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxbml4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFxU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW55eFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RcWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFvQ3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxb1N4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFyQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cW9peFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RclN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFveXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXJpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxcEN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFyeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cXBTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rc0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFwaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXNTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRzlxcHl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVFzaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUc5cXFDeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1Rc3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHOXFxU3hRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRy1RUUN4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVF0U3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGJpbmRpbmdUYWJsZXMgeG1pOmlkPSJfQUctUVFTeFFFZXlteWJ6c3VMOW5CQSIgYmluZGluZ0NvbnRleHQ9Il9BRy1RdGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxiaW5kaW5nVGFibGVzIHhtaTppZD0iX0FHLVFRaXhRRWV5bXlienN1TDluQkEiIGJpbmRpbmdDb250ZXh0PSJfQUctUXR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8YmluZGluZ1RhYmxlcyB4bWk6aWQ9Il9BRy1RUXl4UUVleW15YnpzdUw5bkJBIiBiaW5kaW5nQ29udGV4dD0iX0FHLVF1Q3hRRWV5bXlienN1TDluQkEiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFSQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29udGV4dHMuZGlhbG9nQW5kV2luZG93IiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgbmFtZT0iSW4gRGlhbG9ncyBhbmQgV2luZG93cyIgZGVzY3JpcHRpb249IkVpdGhlciBhIGRpYWxvZyBvciBhIHdpbmRvdyBpcyBvcGVuIj4KKyAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb250ZXh0cy53aW5kb3ciIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBuYW1lPSJJbiBXaW5kb3dzIiBkZXNjcmlwdGlvbj0iQSB3aW5kb3cgaXMgb3BlbiI+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb250ZXh0cy52aWV3cyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIG5hbWU9IiViaW5kaW5nY29udGV4dC5uYW1lLmJpbmRpbmdWaWV3Ii8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5FZGl0Q29udGV4dCIgbmFtZT0iVGVybWluYWwgQ29udHJvbCBpbiBGb2N1cyIgZGVzY3JpcHRpb249IlNob3cgbW9kaWZpZWQga2V5Ym9hcmQgc2hvcnRjdXRzIGluIGNvbnRleHQgbWVudSIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFTQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuQnJlYWtwb2ludFZpZXciIG5hbWU9IkluIEJyZWFrcG9pbnRzIFZpZXciIGRlc2NyaXB0aW9uPSJUaGUgYnJlYWtwb2ludHMgdmlldyBjb250ZXh0Ii8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS50ZXh0RWRpdG9yU2NvcGUiIG5hbWU9IkVkaXRpbmcgVGV4dCIgZGVzY3JpcHRpb249IkVkaXRpbmcgVGV4dCBDb250ZXh0Ij4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFTaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuamF2YUVkaXRvclNjb3BlIiBuYW1lPSJFZGl0aW5nIEphdmFTY3JpcHQgU291cmNlIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBKYXZhU2NyaXB0IFNvdXJjZSBDb250ZXh0Ij4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5qYXZhc2NyaXB0Vmlld1Njb3BlIiBuYW1lPSJKYXZhU2NyaXB0IFZpZXciIGRlc2NyaXB0aW9uPSJKYXZhU2NyaXB0IFZpZXcgQ29udGV4dCIvPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuU1FMRWRpdG9yU2NvcGUiIG5hbWU9IkVkaXRpbmcgU1FMIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBTUUwgQ29udGV4dCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY2xhc3NGaWxlRWRpdG9yU2NvcGUiIG5hbWU9IkJyb3dzaW5nIGF0dGFjaGVkIEphdmEgU291cmNlIiBkZXNjcmlwdGlvbj0iQnJvd3NpbmcgYXR0YWNoZWQgSmF2YSBTb3VyY2UgQ29udGV4dCIvPgorICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuamF2YUVkaXRvclNjb3BlIiBuYW1lPSJFZGl0aW5nIEphdmEgU291cmNlIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBKYXZhIFNvdXJjZSBDb250ZXh0Ii8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RVHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3RydWN0dXJlZFRleHRFZGl0b3JTY29wZSIgbmFtZT0iRWRpdGluZyBpbiBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9ycyIgZGVzY3JpcHRpb249IkVkaXRpbmcgaW4gU3RydWN0dXJlZCBUZXh0IEVkaXRvcnMiPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RVUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY2xlYW51cCIgbmFtZT0iWE1MIFNvdXJjZSBDbGVhbnVwIiBkZXNjcmlwdGlvbj0iWE1MIFNvdXJjZSBDbGVhbnVwIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFVU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb21tZW50cyIgbmFtZT0iU291cmNlIENvbW1lbnRzIGluIFN0cnVjdHVyZWQgVGV4dCBFZGl0b3JzIiBkZXNjcmlwdGlvbj0iU291cmNlIENvbW1lbnRzIGluIFN0cnVjdHVyZWQgVGV4dCBFZGl0b3JzIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIgbmFtZT0iSlNQIFNvdXJjZSIgZGVzY3JpcHRpb249IkpTUCBTb3VyY2UiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIiBuYW1lPSJFZGl0aW5nIFhNTCBTb3VyY2UiIGRlc2NyaXB0aW9uPSJFZGl0aW5nIFhNTCBTb3VyY2UiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLm9jY3VycmVuY2VzIiBuYW1lPSJYTUwgU291cmNlIE9jY3VycmVuY2VzIiBkZXNjcmlwdGlvbj0iWE1MIFNvdXJjZSBPY2N1cnJlbmNlcyIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RVlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuZ3JhbW1hciIgbmFtZT0iWE1MIFNvdXJjZSBHcmFtbWFyIiBkZXNjcmlwdGlvbj0iWE1MIFNvdXJjZSBHcmFtbWFyIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFWaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb21tZW50cyIgbmFtZT0iWE1MIFNvdXJjZSBDb21tZW50cyIgZGVzY3JpcHRpb249IlhNTCBTb3VyY2UgQ29tbWVudHMiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLmV4cGFuZCIgbmFtZT0iWE1MIFNvdXJjZSBFeHBhbmQvQ29sbGFwc2UiIGRlc2NyaXB0aW9uPSJYTUwgU291cmNlIEV4cGFuZC9Db2xsYXBzZSIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RV0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuaGlkZUZvcm1hdCIgbmFtZT0iRWRpdGluZyBpbiBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9ycyIgZGVzY3JpcHRpb249IkVkaXRpbmcgaW4gU3RydWN0dXJlZCBUZXh0IEVkaXRvcnMiLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUVdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnNlbGVjdGlvbiIgbmFtZT0iWE1MIFNvdXJjZSBTZWxlY3Rpb24iIGRlc2NyaXB0aW9uPSJYTUwgU291cmNlIFNlbGVjdGlvbiIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RV2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkuc3RydWN0dXJlZC50ZXh0LmVkaXRvci5qc3Auc2NvcGUiIG5hbWU9IkVkaXRpbmcgSlNQIFNvdXJjZSIgZGVzY3JpcHRpb249IkVkaXRpbmcgSlNQIFNvdXJjZSIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RV3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwubmF2aWdhdGlvbiIgbmFtZT0iWE1MIFNvdXJjZSBOYXZpZ2F0aW9uIiBkZXNjcmlwdGlvbj0iWE1MIFNvdXJjZSBOYXZpZ2F0aW9uIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFYQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0Lmpzb24uY29yZS5qc29uc291cmNlIiBuYW1lPSIlc2NvcGUuc3RydWN0dXJlZC50ZXh0LmVkaXRvci5qc29uLm5hbWUiIGRlc2NyaXB0aW9uPSIlc2NvcGUuc3RydWN0dXJlZC50ZXh0LmVkaXRvci5qc29uLmRlc2NyaXB0aW9uIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFYU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIgbmFtZT0iRWRpdGluZyBDU1MgU291cmNlIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBDU1MgU291cmNlIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFYaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiBuYW1lPSJFZGl0aW5nIEhUTUwgU291cmNlIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBIVE1MIFNvdXJjZSIvPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuZGVwZW5kZW5jaWVzIiBuYW1lPSJYTUwgU291cmNlIERlcGVuZGVuY2llcyIgZGVzY3JpcHRpb249IlhNTCBTb3VyY2UgRGVwZW5kZW5jaWVzIi8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFZQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwub2NjdXJyZW5jZXMiIG5hbWU9IkhUTUwgU291cmNlIE9jY3VycmVuY2VzIiBkZXNjcmlwdGlvbj0iSFRNTCBTb3VyY2UgT2NjdXJyZW5jZXMiLz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFZU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLkFudEVkaXRvclNjb3BlIiBuYW1lPSJFZGl0aW5nIEFudCBCdWlsZGZpbGVzIiBkZXNjcmlwdGlvbj0iRWRpdGluZyBBbnQgQnVpbGRmaWxlcyBDb250ZXh0Ii8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5wYWdlZGVzaWduZXIuZWRpdG9yQ29udGV4dCIgbmFtZT0iVXNpbmcgV2ViIFBhZ2UgRWRpdG9yIiBkZXNjcmlwdGlvbj0iS2V5IGJpbmRpbmcgY29udGV4dCB3aGVuIHVzaW5nIHRoZSB3ZWIgcGFnZSBlZGl0b3IiLz4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFZeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLnBkZUVkaXRvckNvbnRleHQiIG5hbWU9IlBERSBlZGl0b3IiIGRlc2NyaXB0aW9uPSJUaGUgY29udGV4dCB1c2VkIGJ5IFBERSBlZGl0b3JzIi8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmdlbmVyaWNlZGl0b3IuZ2VuZXJpY0VkaXRvckNvbnRleHQiIG5hbWU9ImluIEdlbmVyaWMgQ29kZSBFZGl0b3IiIGRlc2NyaXB0aW9uPSJXaGVuIGVkaXRpbmcgaW4gdGhlIEdlbmVyaWMgQ29kZSBFZGl0b3IiLz4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFaU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXh0LmVkaXRvci5jb250ZXh0IiBuYW1lPSJFZGl0aW5nIFhTRCBjb250ZXh0Ii8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmVkaXRvcnMudGFzayIgbmFtZT0iSW4gVGFza3MgRWRpdG9yIi8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RWnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmludGVybmFsLndpa2l0ZXh0LnVpLmVkaXRvci5iYXNpY01hcmt1cFNvdXJjZUNvbnRleHQiIG5hbWU9Ildpa2lUZXh0IE1hcmt1cCBTb3VyY2UgQ29udGV4dCIgZGVzY3JpcHRpb249Ildpa2lUZXh0IG1hcmt1cCBlZGl0aW5nIGNvbnRleHQiPgorICAgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLmVkaXRvci5tYXJrdXBTb3VyY2VDb250ZXh0IiBuYW1lPSJXaWtpVGV4dCBNYXJrdXAgU291cmNlIENvbnRleHQiIGRlc2NyaXB0aW9uPSJXaWtpVGV4dCBtYXJrdXAgZWRpdGluZyBjb250ZXh0Ii8+CisgICAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFhU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudGFza3MudWkubWFya3VwU291cmNlQ29udGV4dCIgbmFtZT0iVGFzayBNYXJrdXAgRWRpdG9yIFNvdXJjZSBDb250ZXh0Ii8+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5wcm9wZXJ0aWVzRWRpdG9yU2NvcGUiIG5hbWU9IkVkaXRpbmcgUHJvcGVydGllcyBGaWxlcyIgZGVzY3JpcHRpb249IkVkaXRpbmcgUHJvcGVydGllcyBGaWxlcyBDb250ZXh0Ii8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qc2YuZmFjZXNjb25maWcuZWRpdG9yQ29udGV4dCIgbmFtZT0iSW4gRmFjZXMgQ29uZmlnIEVkaXRvciIgZGVzY3JpcHRpb249IktleSBiaW5kaW5nIGNvbnRleHQgd2hlbiB1c2luZyB0aGUgRmFjZXMgQ29uZmlnIEVkaXRvciIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RYkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvbXBhcmUuY29tcGFyZUVkaXRvclNjb3BlIiBuYW1lPSJDb21wYXJpbmcgaW4gYW4gRWRpdG9yIiBkZXNjcmlwdGlvbj0iQ29tcGFyaW5nIGluIGFuIEVkaXRvciIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFiU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5dmlldyIgbmFtZT0iSW4gTWVtb3J5IFZpZXciIGRlc2NyaXB0aW9uPSJJbiBtZW1vcnkgdmlldyIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFiaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNjaGVtYW9iamVjdGVkaXRvci5zY2hlbWFlZGl0aW5nIiBuYW1lPSJTY2hlbWEgT2JqZWN0IEVkaXRvciIgZGVzY3JpcHRpb249IlNjaGVtYSBPYmplY3QgRWRpdG9yIi8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb25zb2xlIiBuYW1lPSJJbiBJL08gQ29uc29sZSIgZGVzY3JpcHRpb249IkluIEkvTyBjb25zb2xlIi8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC52aWV3LnVpLlRlcm1pbmFsc1ZpZXciIG5hbWU9IkluIFRlcm1pbmFsIFZpZXciIGRlc2NyaXB0aW9uPSJTaG93IG1vZGlmaWVkIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBjb250ZXh0IG1lbnUiLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RY1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIG5hbWU9IkluIENvbnNvbGUgVmlldyIgZGVzY3JpcHRpb249IkluIENvbnNvbGUgVmlldyIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFjaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuc2VydmVyVmlld1Njb3BlIiBuYW1lPSJJbiBTZXJ2ZXJzIFZpZXciIGRlc2NyaXB0aW9uPSJJbiBTZXJ2ZXJzIFZpZXciLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RY3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnZ2luZyIgbmFtZT0iRGVidWdnaW5nIiBkZXNjcmlwdGlvbj0iRGVidWdnaW5nIHByb2dyYW1zIj4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFkQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5LmFic3RyYWN0YXN5bmN0YWJsZXJlbmRlcmluZyIgbmFtZT0iSW4gVGFibGUgTWVtb3J5IFJlbmRlcmluZyIgZGVzY3JpcHRpb249IkluIFRhYmxlIE1lbW9yeSBSZW5kZXJpbmciLz4KKyAgICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFkU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5jb250ZXh0IiBuYW1lPSJYU0xUIERlYnVnZ2luZyIgZGVzY3JpcHRpb249IkNvbnRleHQgZm9yIGRlYnVnZ2luZyBYU0xUIi8+CisgICAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5kZWJ1Z2dpbmciIG5hbWU9IkRlYnVnZ2luZyBKYXZhIiBkZXNjcmlwdGlvbj0iRGVidWdnaW5nIEphdmEgcHJvZ3JhbXMiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlZmxvZ1ZpZXciIG5hbWU9IkluIEdpdCBSZWZsb2cgVmlldyIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFlQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwuVGVybWluYWxDb250ZXh0IiBuYW1lPSJUZXJtaW5hbCBUeXBpbmcgQ29ubmVjdGVkIiBkZXNjcmlwdGlvbj0iT3ZlcnJpZGUgQUxUK3ggbWVudSBhY2Nlc3Mga2V5cyB3aGlsZSB0eXBpbmcgaW50byB0aGUgVGVybWluYWwiLz4KKyAgICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIiBuYW1lPSJJbiBUYXNrcyBWaWV3Ii8+CisgICAgICA8Y2hpbGRyZW4geG1pOmlkPSJfQUctUWVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29udGV4dHMudGFza3ZpZXciIG5hbWU9IkluIEdyYWRsZSBUYXNrcyBWaWV3IiBkZXNjcmlwdGlvbj0iVGhpcyBjb250ZXh0IGlzIGFjdGl2YXRlZCB3aGVuIHRoZSBHcmFkbGUgVGFza3MgdmlldyBpcyBpbiBmb2N1cyIvPgorICAgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFleXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3IiBuYW1lPSJJbiBHaXQgUmVwb3NpdG9yaWVzIFZpZXciLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6aWQ9Il9BRy1RZkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzLmRpYWxvZyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIG5hbWU9IkluIERpYWxvZ3MiIGRlc2NyaXB0aW9uPSJBIGRpYWxvZyBpcyBvcGVuIi8+CisgICAgPGNoaWxkcmVuIHhtaTppZD0iX0FHLVFmU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuZWRpdG9ycy5Kc0VkaXRvci5jb250ZXh0IiBuYW1lPSJDaHJvbWl1bSBEZWJ1ZyIgZGVzY3JpcHRpb249IkRlYnVnIENocm9taXVtIEphdmFTY3JpcHQiLz4KKyAgPC9yb290Q29udGV4dD4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFmaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY29udGV4dHMud29ya2JlbmNoTWVudSIgbmFtZT0iV29ya2JlbmNoIE1lbnUiIGRlc2NyaXB0aW9uPSJXaGVuIG5vIFdvcmtiZW5jaCB3aW5kb3dzIGFyZSBhY3RpdmUiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFmeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmJyZWFkY3J1bWJFZGl0b3JTY29wZSIgbmFtZT0iRWRpdG9yIEJyZWFkY3J1bWIgTmF2aWdhdGlvbiIgZGVzY3JpcHRpb249IkVkaXRvciBCcmVhZGNydW1iIE5hdmlnYXRpb24gQ29udGV4dCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLmVkaXRvci5zb3VyY2VWaWV3IiBuYW1lPSJYU0QgRWRpdG9yIFNvdXJjZSBWaWV3IiBkZXNjcmlwdGlvbj0iWFNEIEVkaXRvciBTb3VyY2UgVmlldyIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5lZGl0b3Iuc291cmNlVmlldyIgbmFtZT0iV1NETCBFZGl0b3IgU291cmNlIFZpZXciIGRlc2NyaXB0aW9uPSJXU0RMIEVkaXRvciBTb3VyY2UgVmlldyIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLmVkaXRvci5kZXNpZ25WaWV3IiBuYW1lPSJYU0QgRWRpdG9yIERlc2lnbiBWaWV3IiBkZXNjcmlwdGlvbj0iWFNEIEVkaXRvciBEZXNpZ24gVmlldyIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb250ZXh0cy5hY3Rpb25TZXQiIG5hbWU9IkFjdGlvbiBTZXQiIGRlc2NyaXB0aW9uPSJQYXJlbnQgY29udGV4dCBmb3IgYWN0aW9uIHNldHMiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFoQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZWRpdG9yLmRlc2lnblZpZXciIG5hbWU9IldTREwgRWRpdG9yIERlc2lnbiBWaWV3IiBkZXNjcmlwdGlvbj0iV1NETCBFZGl0b3IgRGVzaWduIFZpZXciLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFoU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLmFjdGlvblNldC5wcmVzZW50YXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmFudC51aS5hY3Rpb25TZXQucHJlc2VudGF0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RaGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxzY3JhcGJvb2suYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3Fsc2NyYXBib29rLmFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50QWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50QWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RaUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z0FjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcm9maWxlQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcm9maWxlQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RaXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFqQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5naXRhY3Rpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmVnaXQudWkuZ2l0YWN0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RalN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkubmF2aWdhdGlvbiIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuZWdpdC51aS5uYXZpZ2F0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Raml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5KRFREZWJ1Z0FjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkpEVERlYnVnQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Ranl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5KVW5pdEFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0Lmp1bml0LkpVbml0QWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Ra0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmphdmEuYWN0aW9uU2V0LnByZXNlbnRhdGlvbiIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LnVpLnRleHQuamF2YS5hY3Rpb25TZXQucHJlc2VudGF0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Ra1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhRWxlbWVudENyZWF0aW9uQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFreXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkFfT3BlbkFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LnVpLkFfT3BlbkFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUWxDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuQ29kaW5nQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5qZHQudWkuQ29kaW5nQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5TZWFyY2hBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpkdC51aS5TZWFyY2hBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFsaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5hY3Rpb25TZXQuanBhRWxlbWVudENyZWF0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmFjdGlvblNldC5qcGFFbGVtZW50Q3JlYXRpb24iLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFseXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJlZU1haW5BY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5qYXZhLmFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UubXlseW4uamF2YS5hY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uamF2YS5hY3Rpb25TZXQuYnJvd3NpbmciIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLm15bHluLmphdmEuYWN0aW9uU2V0LmJyb3dzaW5nIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RbXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmRvYy5hY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLm15bHluLmRvYy5hY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFuQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubmF2aWdhdGlvbiIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubmF2aWdhdGlvbiIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5uYXZpZ2F0aW9uLmFkZGl0aW9ucyIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkubmF2aWdhdGlvbi5hZGRpdGlvbnMiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFuaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLlNlYXJjaEFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UucGRlLnVpLlNlYXJjaEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLmFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUW9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yc2UuY29yZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS5yc2UuY29yZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rb1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnNlYXJjaC5zZWFyY2hBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFvaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGVhbS51aS5hY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnRlYW0udWkuYWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rb3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb24iLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5uYXZpZ2F0aW9uIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0Lm5hdmlnYXRpb24iLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbyIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5jb252ZXJ0TGluZURlbGltaXRlcnNUbyIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbHNTZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sc1NldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFxQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0LmtleUJpbmRpbmdzIiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3MiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuV29ya2luZ1NldE1vZGlmaWNhdGlvbkFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UudWkuV29ya2luZ1NldE1vZGlmaWNhdGlvbkFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5Xb3JraW5nU2V0QWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS51aS5Xb3JraW5nU2V0QWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RcXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXMiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXMiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5wcmVzZW50YXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQucHJlc2VudGF0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RclN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHMiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmFjdGlvblNldHMiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkudGV4dC5qYXZhLmFjdGlvblNldC5wcmVzZW50YXRpb24iIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnRleHQuamF2YS5hY3Rpb25TZXQucHJlc2VudGF0aW9uIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1Rcnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQiLz4KKyAgPHJvb3RDb250ZXh0IHhtaTppZD0iX0FHLVFzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YUFjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YUFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5BX09wZW5BY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkFfT3BlbkFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5Db2RpbmdBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkNvZGluZ0FjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5TZWFyY2hBY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlNlYXJjaEFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLm5ldy5hY3Rpb25TZXQiIG5hbWU9IkF1dG86Om9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkubmV3LmFjdGlvblNldCIvPgorICA8cm9vdENvbnRleHQgeG1pOmlkPSJfQUctUXRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndlYmJyb3dzZXIuYWN0aW9uU2V0IiBuYW1lPSJBdXRvOjpvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndlYmJyb3dzZXIuYWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RdGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC53ZWIudWkud2l6YXJkc0FjdGlvblNldCIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2Uud3N0LndlYi51aS53aXphcmRzQWN0aW9uU2V0Ii8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RdHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5leHBsb3JlciIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyIi8+CisgIDxyb290Q29udGV4dCB4bWk6aWQ9Il9BRy1RdUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcubG9jYWxKYXZhQXBwbGljYXRpb24uaW50ZXJuYWwub3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgbmFtZT0iQXV0bzo6b3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5sb2NhbEphdmFBcHBsaWNhdGlvbi5pbnRlcm5hbC5vcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIi8+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RdVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNvbXBhdGliaWxpdHkuZWRpdG9yIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuZTQucHJpbWFyeURhdGFTdGFjayIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eUVkaXRvciI+CisgICAgPHRhZ3M+RWRpdG9yPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkudmlld3MuQW50VmlldyIgbGFiZWw9IkFudCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5hbnQudWkvaWNvbnMvZnVsbC9ldmlldzE2L2FudF92aWV3LnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iQW50IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LmludGVybmFsLnVpLnZpZXdzLkFudFZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpBbnQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RdXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS52aWV3cy50YXNrdmlldyIgbGFiZWw9IkdyYWRsZSBUYXNrcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5idWlsZHNoaXAudWkvaWNvbnMvZnVsbC9ldmlldzE2L3Rhc2tzX3ZpZXcucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHcmFkbGUiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkudmlldy50YXNrLlRhc2tWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R3JhZGxlPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkudmlld3MuZXhlY3V0aW9udmlldyIgbGFiZWw9IkdyYWRsZSBFeGVjdXRpb25zIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS9pY29ucy9mdWxsL2V2aWV3MTYvZXhlY3V0aW9uc192aWV3LnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR3JhZGxlIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLnZpZXcuZXhlY3V0aW9uLkV4ZWN1dGlvbnNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R3JhZGxlPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1ZpZXciIGxhYmVsPSJEZWJ1ZyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvZGVidWdfdmlldy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkRlYnVnIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MubGF1bmNoLkxhdW5jaFZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5CcmVha3BvaW50VmlldyIgbGFiZWw9IkJyZWFrcG9pbnRzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRlYnVnLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9icmVha3BvaW50X3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLmJyZWFrcG9pbnRzLkJyZWFrcG9pbnRzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1Rdnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlZhcmlhYmxlVmlldyIgbGFiZWw9IlZhcmlhYmxlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvdmFyaWFibGVfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkRlYnVnIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MudmFyaWFibGVzLlZhcmlhYmxlc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5FeHByZXNzaW9uVmlldyIgbGFiZWw9IkV4cHJlc3Npb25zIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRlYnVnLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi93YXRjaGxpc3Rfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkRlYnVnIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MuZXhwcmVzc2lvbi5FeHByZXNzaW9uVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6RGVidWc8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1Rd1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLlJlZ2lzdGVyVmlldyIgbGFiZWw9IlJlZ2lzdGVycyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvcmVnaXN0ZXJfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkRlYnVnIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MucmVnaXN0ZXJzLlJlZ2lzdGVyc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5Nb2R1bGVWaWV3IiBsYWJlbD0iTW9kdWxlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5kZWJ1Zy51aS9pY29ucy9mdWxsL2V2aWV3MTYvbW9kdWxlX3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLnZpZXdzLm1vZHVsZXMuTW9kdWxlc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5NZW1vcnlWaWV3IiBsYWJlbD0iTWVtb3J5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmRlYnVnLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9tZW1vcnlfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkRlYnVnIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkudmlld3MubWVtb3J5Lk1lbW9yeVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlVmlldyIgbGFiZWw9IkNvdmVyYWdlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVjbGVtbWEudWkvaWNvbnMvZnVsbC9ldmlldzE2L2NvdmVyYWdlLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVjbGVtbWEuaW50ZXJuYWwudWkuY292ZXJhZ2V2aWV3LkNvdmVyYWdlVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXciIGxhYmVsPSJHaXQgUmVwb3NpdG9yaWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVnaXQudWkvaWNvbnMvZXZpZXcxNi9yZXBvX3JlcC5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdpdCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkuaW50ZXJuYWwucmVwb3NpdG9yeS5SZXBvc2l0b3JpZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdpdDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5TdGFnaW5nVmlldyIgbGFiZWw9IkdpdCBTdGFnaW5nIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVnaXQudWkvaWNvbnMvZXZpZXcxNi9zdGFnaW5nLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2l0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aS5pbnRlcm5hbC5zdGFnaW5nLlN0YWdpbmdWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdpdDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5JbnRlcmFjdGl2ZVJlYmFzZVZpZXciIGxhYmVsPSJHaXQgSW50ZXJhY3RpdmUgUmViYXNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVnaXQudWkvaWNvbnMvZXZpZXcxNi9yZWJhc2VfaW50ZXJhY3RpdmUucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHaXQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmludGVybmFsLnJlYmFzZS5SZWJhc2VJbnRlcmFjdGl2ZVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2l0PC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLkNvbXBhcmVUcmVlVmlldyIgbGFiZWw9IkdpdCBUcmVlIENvbXBhcmUiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZWdpdC51aS9pY29ucy9vYmoxNi9naXRyZXBvc2l0b3J5LnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2l0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aS5pbnRlcm5hbC5kaWFsb2dzLkNvbXBhcmVUcmVlVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHaXQ8L3RhZ3M+CisgICAgPHRhZ3M+Tm9SZXN0b3JlPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlZmxvZ1ZpZXciIGxhYmVsPSJHaXQgUmVmbG9nIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVnaXQudWkvaWNvbnMvZXZpZXcxNi9yZWZsb2cucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHaXQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmludGVybmFsLnJlZmxvZy5SZWZsb2dWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmVnaXQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdpdDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZ2VmLnVpLnBhbGV0dGVfdmlldyIgbGFiZWw9IlBhbGV0dGUiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZ2VmL2ljb25zL3BhbGV0dGVfdmlldy5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5nZWYudWkudmlld3MucGFsZXR0ZS5QYWxldHRlVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5nZWYiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ReXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuSGVscFZpZXciIGxhYmVsPSJIZWxwIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmhlbHAudWkvaWNvbnMvdmlldzE2L2hlbHBfdmlldy5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkhlbHAiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5oZWxwLnVpLmludGVybmFsLnZpZXdzLkhlbHBWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmhlbHAudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkhlbHA8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RekN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5VmlldyIgbGFiZWw9IkRlYnVnIFNoZWxsIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS9pY29ucy9mdWxsL2V0b29sMTYvZGlzcF9zYm9vay5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkRlYnVnIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmRpc3BsYXkuRGlzcGxheVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpEZWJ1ZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVF6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0LlJlc3VsdFZpZXciIGxhYmVsPSJKVW5pdCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQuanVuaXQvaWNvbnMvZnVsbC9ldmlldzE2L2p1bml0LnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5qdW5pdC51aS5UZXN0UnVubmVyVmlld1BhcnQiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0Lmp1bml0Ii8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyIiBsYWJlbD0iUGFja2FnZSBFeHBsb3JlciIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3BhY2thZ2UucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnBhY2thZ2V2aWV3LlBhY2thZ2VFeHBsb3JlclBhcnQiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUXp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgbGFiZWw9IlR5cGUgSGllcmFyY2h5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvY2xhc3NfaGkucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnR5cGVoaWVyYXJjaHkuVHlwZUhpZXJhcmNoeVZpZXdQYXJ0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlByb2plY3RzVmlldyIgbGFiZWw9IlByb2plY3RzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvcHJvamVjdHMucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhIEJyb3dzaW5nIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmJyb3dzaW5nLlByb2plY3RzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlc1ZpZXciIGxhYmVsPSJQYWNrYWdlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L3BhY2thZ2VzLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSBCcm93c2luZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5icm93c2luZy5QYWNrYWdlc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhIEJyb3dzaW5nPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZXNWaWV3IiBsYWJlbD0iVHlwZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi90eXBlcy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmEgQnJvd3NpbmciIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuYnJvd3NpbmcuVHlwZXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YSBCcm93c2luZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLk1lbWJlcnNWaWV3IiBsYWJlbD0iTWVtYmVycyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5qZHQudWkvaWNvbnMvZnVsbC9ldmlldzE2L21lbWJlcnMucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhIEJyb3dzaW5nIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmJyb3dzaW5nLk1lbWJlcnNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YSBCcm93c2luZzwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVExQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmNhbGxoaWVyYXJjaHkudmlldyIgbGFiZWw9IkNhbGwgSGllcmFyY2h5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvY2FsbF9oaWVyYXJjaHkucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJKYXZhIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmNhbGxoaWVyYXJjaHkuQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YTwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVExU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UZW1wbGF0ZXNWaWV3IiBsYWJlbD0iVGVtcGxhdGVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvdGVtcGxhdGVzLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IudGVtcGxhdGVzLlRlbXBsYXRlc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuU291cmNlVmlldyIgbGFiZWw9IkRlY2xhcmF0aW9uIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvc291cmNlLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5pbmZvdmlld3MuU291cmNlVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhZG9jVmlldyIgbGFiZWw9IkphdmFkb2MiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuamR0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9qYXZhZG9jLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5pbmZvdmlld3MuSmF2YWRvY1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpKYXZhPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS52aWV3cy5NYXZlblJlcG9zaXRvcnlWaWV3IiBsYWJlbD0iTWF2ZW4gUmVwb3NpdG9yaWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpL2ljb25zL21hdmVuX2luZGV4ZXMuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJNYXZlbiIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLnZpZXdzLk1hdmVuUmVwb3NpdG9yeVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk1hdmVuPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuY29yZS52aWV3cy5NYXZlbkJ1aWxkIiBsYWJlbD0iTWF2ZW4gV29ya3NwYWNlIEJ1aWxkIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9kZWZhdWx0dmlld19taXNjLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iTWF2ZW4iIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC52aWV3cy5idWlsZC5CdWlsZERlYnVnVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6TWF2ZW48L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbW1vbnMucmVwb3NpdG9yaWVzLnVpLm5hdmlnYXRvci5SZXBvc2l0b3JpZXMiIGxhYmVsPSJUZWFtIFJlcG9zaXRvcmllcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5teWx5bi5jb21tb25zLnJlcG9zaXRvcmllcy51aS9pY29ucy9ldmlldzE2L3JlcG9zaXRvcmllcy5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9Ik15bHluIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uaW50ZXJuYWwuY29tbW9ucy5yZXBvc2l0b3JpZXMudWkuUmVwb3NpdG9yaWVzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi5jb21tb25zLnJlcG9zaXRvcmllcy51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6TXlseW48L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RMnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzIiBsYWJlbD0iVGFzayBMaXN0IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpL2ljb25zL2V2aWV3MTYvdGFzay1saXN0LmdpZiIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iTXlseW4iIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi5pbnRlcm5hbC50YXNrcy51aS52aWV3cy5UYXNrTGlzdFZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3cy5yZXBvc2l0b3JpZXMiIGxhYmVsPSJUYXNrIFJlcG9zaXRvcmllcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS9pY29ucy9ldmlldzE2L3JlcG9zaXRvcmllcy5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9Ik15bHluIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uaW50ZXJuYWwudGFza3MudWkudmlld3MuVGFza1JlcG9zaXRvcmllc1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5wMi51aS5SZXBvc2l0b3J5RXhwbG9yZXIiIGxhYmVsPSJSZXBvc2l0b3J5IEV4cGxvcmVyIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLm9vbXBoLnAyLnVpL2ljb25zL29iajE2L3JlcG9zaXRvcnkuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJPb21waCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLm9vbXBoLnAyLmludGVybmFsLnVpLlJlcG9zaXRvcnlFeHBsb3JlciIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5vb21waC5wMi51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6T29tcGg8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RM2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5hcGlkb2NzLnJjcC52aWV3cy5hcGlkb2NzIiBsYWJlbD0iQXVnbWVudGVkIERvY3MiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmFwaWRvY3MucmNwL2ljb25zL3ZpZXcxNi9hcGlkb2NzLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iQ29kZSBSZWNvbW1lbmRlcnMiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW5qZWN0aW9uLkV4dGVuc2lvbkZhY3RvcnkiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmFwaWRvY3MucmNwIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpDb2RlIFJlY29tbWVuZGVyczwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3Audmlld3MucHJvamVjdENvb3JkaW5hdGVzIiBsYWJlbD0iUHJvamVjdCBDb29yZGluYXRlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuY29vcmRpbmF0ZXMucmNwL2ljb25zL3ZpZXcxNi9kZXBpbnNwLmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iQ29kZSBSZWNvbW1lbmRlcnMiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW5qZWN0aW9uLkV4dGVuc2lvbkZhY3RvcnkiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmNvb3JkaW5hdGVzLnJjcCIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6Q29kZSBSZWNvbW1lbmRlcnM8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwLnZpZXdzLm1vZGVsUmVwb3NpdG9yaWVzIiBsYWJlbD0iTW9kZWwgUmVwb3NpdG9yaWVzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwL2ljb25zL3ZpZXcxNi9kZXBpbnNwLmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iQ29kZSBSZWNvbW1lbmRlcnMiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW5qZWN0aW9uLkV4dGVuc2lvbkZhY3RvcnkiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkNvZGUgUmVjb21tZW5kZXJzPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcC52aWV3cy5kZXBlbmRlbmN5T3ZlcnZpZXciIGxhYmVsPSJEZXBlbmRlbmN5IE92ZXJ2aWV3IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwL2ljb25zL3ZpZXcxNi9kZXBpbnNwLmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iQ29kZSBSZWNvbW1lbmRlcnMiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW5qZWN0aW9uLkV4dGVuc2lvbkZhY3RvcnkiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3AiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkNvZGUgUmVjb21tZW5kZXJzPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2guU2VhcmNoUmVzdWx0VmlldyIgbGFiZWw9IkNsYXNzaWMgU2VhcmNoIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnNlYXJjaC9pY29ucy9mdWxsL2V2aWV3MTYvc2VhcmNocmVzLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaC5pbnRlcm5hbC51aS5TZWFyY2hSZXN1bHRWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaCIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uuc2VhcmNoLnVpLnZpZXdzLlNlYXJjaFZpZXciIGxhYmVsPSJTZWFyY2giIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc2VhcmNoL2ljb25zL2Z1bGwvZXZpZXcxNi9zZWFyY2hyZXMucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc2VhcmNoMi5pbnRlcm5hbC51aS5TZWFyY2hWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaCIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGVhbS5zeW5jLnZpZXdzLlN5bmNocm9uaXplVmlldyIgbGFiZWw9IlN5bmNocm9uaXplIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnRlYW0udWkvaWNvbnMvZnVsbC9ldmlldzE2L3N5bmNoX3N5bmNoLnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iVGVhbSIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnRlYW0uaW50ZXJuYWwudWkuc3luY2hyb25pemUuU3luY2hyb25pemVWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnRlYW0udWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOlRlYW08L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0udWkuR2VuZXJpY0hpc3RvcnlWaWV3IiBsYWJlbD0iSGlzdG9yeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS50ZWFtLnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9oaXN0b3J5X3ZpZXcucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJUZWFtIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudGVhbS5pbnRlcm5hbC51aS5oaXN0b3J5LkdlbmVyaWNIaXN0b3J5VmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS50ZWFtLnVpIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpUZWFtPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50aXBzLmlkZS50aXBQYXJ0IiBsYWJlbD0iVGlwIG9mIHRoZSBEYXkiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudGlwcy51aS9pY29ucy9saWdodGJ1bGIucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJIZWxwIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS50aXBzLmlkZS9vcmcuZWNsaXBzZS50aXBzLmlkZS5pbnRlcm5hbC5UaXBQYXJ0Ij4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkhlbHA8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmludHJvdmlldyIgbGFiZWw9IldlbGNvbWUiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkvaWNvbnMvZnVsbC9ldmlldzE2L2RlZmF1bHR2aWV3X21pc2MucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVmlld0ludHJvQWRhcHRlclBhcnQiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmJyb3dzZXIudmlldyIgbGFiZWw9IkludGVybmFsIFdlYiBCcm93c2VyIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmJyb3dzZXIvaWNvbnMvb2JqMTYvaW50ZXJuYWxfYnJvd3Nlci5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5icm93c2VyLldlYkJyb3dzZXJWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmJyb3dzZXIiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLnZpZXdzLkNoZWF0U2hlZXRWaWV3IiBsYWJlbD0iQ2hlYXQgU2hlZXRzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzL2ljb25zL3ZpZXcxNi9jaGVhdHNoZWV0X3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJIZWxwIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuY2hlYXRzaGVldHMudmlld3MuQ2hlYXRTaGVldFZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkhlbHA8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIGxhYmVsPSJDb25zb2xlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmNvbnNvbGUvaWNvbnMvZnVsbC9jdmlldzE2L2NvbnNvbGVfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5jb25zb2xlLkNvbnNvbGVWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RNnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIgbGFiZWw9IlByb2dyZXNzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvcHZpZXcucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwucHJvZ3Jlc3MuUHJvZ3Jlc3NWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUmVzb3VyY2VOYXZpZ2F0b3IiIGxhYmVsPSJOYXZpZ2F0b3IiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi9maWxlbmF2X25hdi5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS52aWV3cy5uYXZpZ2F0b3IuUmVzb3VyY2VOYXZpZ2F0b3IiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Cb29rbWFya1ZpZXciIGxhYmVsPSJCb29rbWFya3MiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi9ia21ya19uYXYucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubWFya2Vycy5Cb29rbWFya3NWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuVGFza0xpc3QiIGxhYmVsPSJUYXNrcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUvaWNvbnMvZnVsbC9ldmlldzE2L3Rhc2tzX3Rzay5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5tYXJrZXJzLlRhc2tzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RN3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3IiBsYWJlbD0iUHJvYmxlbXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlL2ljb25zL2Z1bGwvZXZpZXcxNi9wcm9ibGVtc192aWV3LnBuZyIgdG9vbHRpcD0iIiBhbGxvd011bHRpcGxlPSJ0cnVlIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnZpZXdzLm1hcmtlcnMuUHJvYmxlbXNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXciIGxhYmVsPSJNYXJrZXJzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS9pY29ucy9mdWxsL2V2aWV3MTYvcHJvYmxlbXNfdmlldy5wbmciIHRvb2x0aXA9IiIgYWxsb3dNdWx0aXBsZT0idHJ1ZSIgY2F0ZWdvcnk9IkdlbmVyYWwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5tYXJrZXJzLkFsbE1hcmtlcnNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgbGFiZWw9IlByb2plY3QgRXhwbG9yZXIiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy9pY29ucy9mdWxsL2V2aWV3MTYvcmVzb3VyY2VfcGVyc3AucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy5Qcm9qZWN0RXhwbG9yZXIiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcyIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgbGFiZWw9IlByb3BlcnRpZXMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkudmlld3MvaWNvbnMvZnVsbC9ldmlldzE2L3Byb3BfcHMucG5nIiB0b29sdGlwPSIiIGFsbG93TXVsdGlwbGU9InRydWUiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUTh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgbGFiZWw9Ik91dGxpbmUiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkudmlld3MvaWNvbnMvZnVsbC9ldmlldzE2L291dGxpbmVfY28ucG5nIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmUiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UudWkudmlld3MiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1ROUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciIGxhYmVsPSJFcnJvciBMb2ciIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkudmlld3MubG9nL2ljb25zL2V2aWV3MTYvZXJyb3JfbG9nLnBuZyIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iR2VuZXJhbCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnZpZXdzLmxvZy5Mb2dWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmxvZyIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXciIGxhYmVsPSJTbmlwcGV0cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzL2ljb25zL3NuaXBwZXRzX3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJHZW5lcmFsIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cy5pbnRlcm5hbC51aS5TbmlwcGV0c1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5zbmlwcGV0cyIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5hbm5vdGF0aW9ucy5YTUxBbm5vdGF0aW9uc1ZpZXciIGxhYmVsPSJEb2N1bWVudGF0aW9uIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC54bWwudWkvaWNvbnMvZnVsbC9vYmoxNi9jb21tZW50X29iai5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IlhNTCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmlld3MuYW5ub3RhdGlvbnMuWE1MQW5ub3RhdGlvbnNWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOlhNTDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVE5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5jb250ZW50bW9kZWwudmlldyIgbGFiZWw9IkNvbnRlbnQgTW9kZWwiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnhtbC51aS9pY29ucy9mdWxsL3ZpZXcxNi9oaWVyYXJjaHkuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJYTUwiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZpZXdzLmNvbnRlbnRtb2RlbC5Db250ZW50TW9kZWxWaWV3Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOlhNTDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLm5hdmlnYXRvci5idWlsZHMiIGxhYmVsPSJCdWlsZHMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpL2ljb25zL2V2aWV3MTYvYnVpbGQtdmlldy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9Ik15bHluIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4uaW50ZXJuYWwuYnVpbGRzLnVpLnZpZXcuQnVpbGRzVmlldyIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUS1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuc25pcG1hdGNoLnJjcC52aWV3cy5zbmlwcGV0cyIgbGFiZWw9IlNuaXBwZXRzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5zbmlwbWF0Y2gucmNwL2ljb25zL3ZpZXcxNi9zbmlwcGV0cy5wbmciIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkNvZGUgUmVjb21tZW5kZXJzIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmluamVjdGlvbi5FeHRlbnNpb25GYWN0b3J5Ii8+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0J1bmRsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5zbmlwbWF0Y2gucmNwIi8+CisgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICA8dGFncz5jYXRlZ29yeVRhZzpDb2RlIFJlY29tbWVuZGVyczwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVEtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudmlldyIgbGFiZWw9IlRDUC9JUCBNb25pdG9yIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpL2ljb25zL2N2aWV3MTYvbW9uaXRvclZpZXcuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJEZWJ1ZyIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLmludGVybmFsLnZpZXcuTW9uaXRvclZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkRlYnVnPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8ZGVzY3JpcHRvcnMgeG1pOmlkPSJfQUctUS15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5UeXBlSGllcmFyY2h5IiBsYWJlbD0iSGllcmFyY2h5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9jbGFzc19oaS5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmFTY3JpcHQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS50eXBlaGllcmFyY2h5LlR5cGVIaWVyYXJjaHlWaWV3UGFydCIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YVNjcmlwdDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVFfQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuUGFja2FnZUV4cGxvcmVyIiBsYWJlbD0iU2NyaXB0IEV4cGxvcmVyIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9wYWNrYWdlLmdpZiIgdG9vbHRpcD0iIiBjYXRlZ29yeT0iSmF2YVNjcmlwdCIgY2xvc2VhYmxlPSJ0cnVlIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmU0LmNvbXBhdGliaWxpdHkuQ29tcGF0aWJpbGl0eVZpZXciPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdDbGFzcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLnVpLnBhY2thZ2V2aWV3LlBhY2thZ2VFeHBsb3JlclBhcnQiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmFTY3JpcHQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RX1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNhbGxoaWVyYXJjaHkudmlldyIgbGFiZWw9IkNhbGwgSGllcmFyY2h5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9jYWxsX2hpZXJhcmNoeS5naWYiIHRvb2x0aXA9IiIgY2F0ZWdvcnk9IkphdmFTY3JpcHQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5jYWxsaGllcmFyY2h5LkNhbGxIaWVyYXJjaHlWaWV3UGFydCIvPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yaWdpbmFsQ29tcGF0aWJpbGl0eVZpZXdCdW5kbGUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6SmF2YVNjcmlwdDwvdGFncz4KKyAgPC9kZXNjcmlwdG9ycz4KKyAgPGRlc2NyaXB0b3JzIHhtaTppZD0iX0FHLVFfaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuU291cmNlVmlldyIgbGFiZWw9IkRlY2xhcmF0aW9uIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpL2ljb25zL2Z1bGwvZXZpZXcxNi9zb3VyY2UuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJKYXZhU2NyaXB0IiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuZTQuY29tcGF0aWJpbGl0eS5Db21wYXRpYmlsaXR5VmlldyI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0ib3JpZ2luYWxDb21wYXRpYmlsaXR5Vmlld0NsYXNzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuaW5mb3ZpZXdzLlNvdXJjZVZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmFTY3JpcHQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1RX3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFkb2NWaWV3IiBsYWJlbD0iRG9jdW1lbnRhdGlvbiIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9pY29ucy9mdWxsL2V2aWV3MTYvamF2YWRvYy5naWYiIHRvb2x0aXA9IkphdmFTY3JpcHQgRG9jdW1lbnRhdGlvbiIgY2F0ZWdvcnk9IkphdmFTY3JpcHQiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5pbmZvdmlld3MuSmF2YWRvY1ZpZXciLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkiLz4KKyAgICA8dGFncz5WaWV3PC90YWdzPgorICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmFTY3JpcHQ8L3RhZ3M+CisgIDwvZGVzY3JpcHRvcnM+CisgIDxkZXNjcmlwdG9ycyB4bWk6aWQ9Il9BRy1SQUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciIGxhYmVsPSJTZXJ2ZXJzIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkvaWNvbnMvY3ZpZXcxNi9zZXJ2ZXJzX3ZpZXcuZ2lmIiB0b29sdGlwPSIiIGNhdGVnb3J5PSJTZXJ2ZXIiIGNsb3NlYWJsZT0idHJ1ZSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5lNC5jb21wYXRpYmlsaXR5LkNvbXBhdGliaWxpdHlWaWV3Ij4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3Q2xhc3MiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLmNuZi5TZXJ2ZXJzVmlldzIiLz4KKyAgICA8cGVyc2lzdGVkU3RhdGUga2V5PSJvcmlnaW5hbENvbXBhdGliaWxpdHlWaWV3QnVuZGxlIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aSIvPgorICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6U2VydmVyPC90YWdzPgorICA8L2Rlc2NyaXB0b3JzPgorICA8dHJpbUNvbnRyaWJ1dGlvbnMgeG1pOmlkPSJfVkpTZDROcmxFZVd4MU5DOTJONHFSdyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AudHJpbUNvbnN0cmlidXRpb24ubmV3cyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBwYXJlbnRJZD0ib3JnLmVjbGlwc2UudWkudHJpbS5zdGF0dXMiPgorICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfY2tmQjBPRkFFZVdkYjV4Wmd2MERidyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AudG9vbENvbnRyb2wubmV3cyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5uZXdzLnJjcC50b29sYmFyLk5ld3NUb29sQ29udHJvbCIvPgorICA8L3RyaW1Db250cmlidXRpb25zPgorICA8dHJpbUNvbnRyaWJ1dGlvbnMgeG1pOmlkPSJfMnIxMFVGOXRFZU8teW9qSF95NFRKQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24udHJpbWNvbnRyaWJ1dGlvbi5RdWlja0FjY2VzcyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBwYXJlbnRJZD0ib3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyIiBwb3NpdGlvbkluUGFyZW50PSJsYXN0Ij4KKyAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6VG9vbENvbnRyb2wiIHhtaTppZD0iXzc2dVVBRjl0RWVPLXlvakhfeTRUSkEiIGVsZW1lbnRJZD0iU3BhY2VyIEdsdWUiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0L29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5yZW5kZXJlcnMuc3d0LkxheW91dE1vZGlmaWVyVG9vbENvbnRyb2wiPgorICAgICAgPHRhZ3M+Z2x1ZTwvdGFncz4KKyAgICAgIDx0YWdzPm1vdmVfYWZ0ZXI6UGVyc3BlY3RpdmVTcGFjZXI8L3RhZ3M+CisgICAgICA8dGFncz5TSE9XX1JFU1RPUkVfTUVOVTwvdGFncz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpUb29sQ29udHJvbCIgeG1pOmlkPSJfOHRKUGNGOXRFZU8teW9qSF95NFRKQSIgZWxlbWVudElkPSJTZWFyY2hGaWVsZCIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL29yZy5lY2xpcHNlLnVpLmludGVybmFsLnF1aWNrYWNjZXNzLlNlYXJjaEZpZWxkIj4KKyAgICAgIDx0YWdzPm1vdmVfYWZ0ZXI6U3BhY2VyIEdsdWU8L3RhZ3M+CisgICAgICA8dGFncz5ISURFQUJMRTwvdGFncz4KKyAgICAgIDx0YWdzPlNIT1dfUkVTVE9SRV9NRU5VPC90YWdzPgorICAgIDwvY2hpbGRyZW4+CisgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OlRvb2xDb250cm9sIiB4bWk6aWQ9Il85TGdtY0Y5dEVlTy15b2pIX3k0VEpBIiBlbGVtZW50SWQ9IlNlYXJjaC1QUyBHbHVlIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dC5MYXlvdXRNb2RpZmllclRvb2xDb250cm9sIj4KKyAgICAgIDx0YWdzPmdsdWU8L3RhZ3M+CisgICAgICA8dGFncz5tb3ZlX2FmdGVyOlNlYXJjaEZpZWxkPC90YWdzPgorICAgICAgPHRhZ3M+U0hPV19SRVNUT1JFX01FTlU8L3RhZ3M+CisgICAgPC9jaGlsZHJlbj4KKyAgPC90cmltQ29udHJpYnV0aW9ucz4KKyAgPHNuaXBwZXRzIHhzaTp0eXBlPSJhZHZhbmNlZDpQZXJzcGVjdGl2ZSIgeG1pOmlkPSJfQUdfZjJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5KMkVFUGVyc3BlY3RpdmUuJmx0O0phdmEgRUU+IiBzZWxlY3RlZEVsZW1lbnQ9Il9BR19mMnl4UUVleW15YnpzdUw5bkJBIiBsYWJlbD0iJmx0O0phdmEgRUU+IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmpzdC5qMmVlLnVpL2ljb25zL2Z1bGwvY3ZpZXcxNi9qMmVlX3BlcnNwZWN0aXZlLmdpZiI+CisgICAgPHBlcnNpc3RlZFN0YXRlIGtleT0icGVyc3AuaGlkZGVuSXRlbXMiIHZhbHVlPSJwZXJzcC5oaWRlVG9vbGJhclNDOnByaW50LHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC51bmRvLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC5yZWRvLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZVNob3dTZWxlY3RlZEVsZW1lbnRPbmx5LHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUnVuVG9MaW5lLHBlcnNwLmhpZGVUb29sYmFyU0M6b3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuT3BlblByb2plY3RXaXphcmQsIi8+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLm15bHluLmRvYy5hY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb248L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLmFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UucnNlLmNvcmUuc2VhcmNoLnNlYXJjaEFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uuc2VhcmNoLnNlYXJjaEFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5hbm5vdGF0aW9uTmF2aWdhdGlvbjwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmFjdGlvblNldC5uYXZpZ2F0aW9uPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmNvbnZlcnRMaW5lRGVsaW1pdGVyc1RvPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbHNTZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5rZXlCaW5kaW5nczwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0Lm9wZW5GaWxlczwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuYWN0aW9uU2V0czwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuanN0LmoyZWUuSjJlZU1haW5BY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQWN0aW9uU2V0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AuYWN0aW9uU2V0Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnQWN0aW9uU2V0PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLmFjdGlvblNldDpvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJzVmlldzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5EYXRhU291cmNlRXhwbG9yZXJOYXZpZ2F0b3I8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLkJvb2ttYXJrVmlldzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmU8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS53c3QuY29tbW9uLnNuaXBwZXRzLmludGVybmFsLnVpLlNuaXBwZXRzVmlldzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkudmlld3MuQWxsTWFya2Vyc1ZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3Audmlld1NDOm9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnZpZXdzLnRhc2tzPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnZpZXdTQzpvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC52aWV3U0M6b3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldzwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlcjwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLm0yZS5jb3JlLndpemFyZHMuTWF2ZW4yUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5UZXJtaW5hbHNWaWV3PC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmU8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AucGVyc3BTQzpvcmcuZWNsaXBzZS51aS5yZXNvdXJjZVBlcnNwZWN0aXZlPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLnBlcnNwU0M6b3JnLmVjbGlwc2Uud3N0LndlYi51aS53ZWJEZXZQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS51aS5wcm9qZWN0LmZhY2V0LkVhclByb2plY3RXaXphcmQ8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanN0LnNlcnZsZXQudWkucHJvamVjdC5mYWNldC5XZWJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5lamIudWkucHJvamVjdC5mYWNldC5FamJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpzdC5qMmVlLmpjYS51aS5pbnRlcm5hbC53aXphcmQuQ29ubmVjdG9yUHJvamVjdFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuajJlZS51aS5wcm9qZWN0LmZhY2V0LmFwcGNsaWVudC5BcHBDbGllbnRQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLndzdC53ZWIudWkuaW50ZXJuYWwud2l6YXJkcy5TaW1wbGVXZWJQcm9qZWN0V2l6YXJkPC90YWdzPgorICAgIDx0YWdzPnBlcnNwLm5ld1dpelNDOm9yZy5lY2xpcHNlLmpwdC51aS53aXphcmQubmV3SnBhUHJvamVjdDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Quc2VydmxldC51aS5pbnRlcm5hbC53aXphcmQuQWRkU2VydmxldFdpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLmludGVybmFsLndpemFyZC5BZGRTZXNzaW9uQmVhbldpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3QuZWpiLnVpLmludGVybmFsLndpemFyZC5BZGRNZXNzYWdlRHJpdmVuQmVhbldpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qcHQudWkud2l6YXJkLm5ld0VudGl0eTwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5uZXdXaXpTQzpvcmcuZWNsaXBzZS51aS53aXphcmRzLm5ldy5mb2xkZXI8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UudWkud2l6YXJkcy5uZXcuZmlsZTwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5hY3Rpb25TZXQ6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5zaG93SW46b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZVZpZXc8L3RhZ3M+CisgICAgPHRhZ3M+cGVyc3AubmV3V2l6U0M6b3JnLmVjbGlwc2UuanB0LmpwYS51aS53aXphcmQubmV3SnBhUHJvamVjdDwvdGFncz4KKyAgICA8dGFncz5wZXJzcC5wZXJzcFNDOm9yZy5lY2xpcHNlLmpwdC51aS5qcGFQZXJzcGVjdGl2ZTwvdGFncz4KKyAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTYXNoQ29udGFpbmVyIiB4bWk6aWQ9Il9BR19mMnl4UUVleW15YnpzdUw5bkJBIiBzZWxlY3RlZEVsZW1lbnQ9Il9BR19mNFN4UUVleW15YnpzdUw5bkJBIiBob3Jpem9udGFsPSJ0cnVlIj4KKyAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFN0YWNrIiB4bWk6aWQ9Il9BR19mM0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRvcExlZnQiIGNvbnRhaW5lckRhdGE9IjE5MjkiIHNlbGVjdGVkRWxlbWVudD0iX0FHX2YzU3hRRWV5bXlienN1TDluQkEiPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mM1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mM2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlJlc291cmNlTmF2aWdhdG9yIiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuVHlwZUhpZXJhcmNoeSIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmE8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkphdmEgQnJvd3Npbmc8L3RhZ3M+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJiYXNpYzpQYXJ0U2FzaENvbnRhaW5lciIgeG1pOmlkPSJfQUdfZjRTeFFFZXlteWJ6c3VMOW5CQSIgY29udGFpbmVyRGF0YT0iODA3MSIgc2VsZWN0ZWRFbGVtZW50PSJfQUdfZjRpeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYmFzaWM6UGFydFNhc2hDb250YWluZXIiIHhtaTppZD0iX0FHX2Y0aXhRRWV5bXlienN1TDluQkEiIGNvbnRhaW5lckRhdGE9Ijc0NTgiIHNlbGVjdGVkRWxlbWVudD0iX0FHX2Y0eXhRRWV5bXlienN1TDluQkEiIGhvcml6b250YWw9InRydWUiPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiIGNvbnRhaW5lckRhdGE9Ijc4NDciLz4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUdfZjVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b3BSaWdodCIgY29udGFpbmVyRGF0YT0iMjE1MyIgc2VsZWN0ZWRFbGVtZW50PSJfQUdfZjVTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mNVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkudmlld3MudGFza3MiIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOk15bHluPC90YWdzPgorICAgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImJhc2ljOlBhcnRTdGFjayIgeG1pOmlkPSJfQUdfZjV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJib3R0b21SaWdodCIgY29udGFpbmVyRGF0YT0iMjU0MiIgc2VsZWN0ZWRFbGVtZW50PSJfQUdfZjd5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5BbGxNYXJrZXJzVmlldyIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mNml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyc1ZpZXciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6U2VydmVyPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LkRhdGFTb3VyY2VFeHBsb3Jlck5hdmlnYXRvciIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpEYXRhIE1hbmFnZW1lbnQ8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mN0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uc25pcHBldHMuaW50ZXJuYWwudWkuU25pcHBldHNWaWV3IiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mN1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2JsZW1WaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mN2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlRhc2tMaXN0IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mN3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciIGNsb3NlYWJsZT0idHJ1ZSI+CisgICAgICAgICAgICA8dGFncz5WaWV3PC90YWdzPgorICAgICAgICAgICAgPHRhZ3M+Y2F0ZWdvcnlUYWc6R2VuZXJhbDwvdGFncz4KKyAgICAgICAgICA8L2NoaWxkcmVuPgorICAgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0iYWR2YW5jZWQ6UGxhY2Vob2xkZXIiIHhtaTppZD0iX0FHX2Y4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQm9va21hcmtWaWV3IiB0b0JlUmVuZGVyZWQ9ImZhbHNlIiBjbG9zZWFibGU9InRydWUiPgorICAgICAgICAgICAgPHRhZ3M+VmlldzwvdGFncz4KKyAgICAgICAgICAgIDx0YWdzPmNhdGVnb3J5VGFnOkdlbmVyYWw8L3RhZ3M+CisgICAgICAgICAgPC9jaGlsZHJlbj4KKyAgICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9ImFkdmFuY2VkOlBsYWNlaG9sZGVyIiB4bWk6aWQ9Il9BR19mOFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIgdG9CZVJlbmRlcmVkPSJmYWxzZSIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJhZHZhbmNlZDpQbGFjZWhvbGRlciIgeG1pOmlkPSJfQUdfZjhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkudmlld3MuU2VhcmNoVmlldyIgY2xvc2VhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgIDx0YWdzPlZpZXc8L3RhZ3M+CisgICAgICAgICAgICA8dGFncz5jYXRlZ29yeVRhZzpHZW5lcmFsPC90YWdzPgorICAgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8L2NoaWxkcmVuPgorICAgIDwvY2hpbGRyZW4+CisgIDwvc25pcHBldHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mOHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5jdXN0b21pemVQZXJzcGVjdGl2ZSIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbW1hbmROYW1lPSJDdXN0b21pemUgUGVyc3BlY3RpdmUiIGRlc2NyaXB0aW9uPSJDdXN0b21pemUgdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2Y5Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uaW5saW5lTG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gSW5saW5lIGxvY2FsIHZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0lubGluZSBsb2NhbCB2YXJpYWJsZSciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZjlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LnBhZ2VVcCIgY29tbWFuZE5hbWU9IlNlbGVjdCBQYWdlIFVwIiBkZXNjcmlwdGlvbj0iU2VsZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2UiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZjlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQudG9nZ2xlV29yZFdyYXAiIGNvbW1hbmROYW1lPSJUb2dnbGUgV29yZCBXcmFwIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIHdvcmQgd3JhcCBpbiB0aGUgY3VycmVudCB0ZXh0IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mOXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5SZXNldFF1aWNrZGlmZkJhc2VsaW5lIiBjb21tYW5kTmFtZT0iUmVzZXQgcXVpY2tkaWZmIGJhc2VsaW5lIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHX2YtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlJlc2V0UXVpY2tkaWZmQmFzZWxpbmVUYXJnZXQiIG5hbWU9IlJlc2V0IHRhcmdldCAoSEVBRCwgSEVBRF4xKSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mLVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnAyLnVpLlNlYXJjaFJlcXVpcmVtZW50cyIgY29tbWFuZE5hbWU9IlNlYXJjaCBSZXF1aXJlbWVudHMiIGNhdGVnb3J5PSJfQUhCVU9DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZi1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5jb252ZXJ0TG9jYWxUb0ZpZWxkLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIENvbnZlcnQgbG9jYWwgdmFyaWFibGUgdG8gZmllbGQiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQ29udmVydCBsb2NhbCB2YXJpYWJsZSB0byBmaWVsZCciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZi15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hZGRUaHJvd3NEZWNsIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIHRocm93cyBkZWNsYXJhdGlvbiIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgdGhyb3dzIGRlY2xhcmF0aW9uJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mX0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuanVuaXRQbHVnaW5TaG9ydGN1dC5jb3ZlcmFnZSIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIEpVbml0IFBsdWctaW4gVGVzdCIgZGVzY3JpcHRpb249IkNvdmVyYWdlIEpVbml0IFBsdWctaW4gVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19mX1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLm1heGltaXplIiBjb21tYW5kTmFtZT0iTWF4aW1pemUgQWN0aXZlIFZpZXcgb3IgRWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVVeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2ZfaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguc2V0dXAuZWRpdG9yLm9wZW5EaXNjb3ZlcmVkVHlwZSIgY29tbWFuZE5hbWU9Ik9wZW4gRGlzY292ZXJlZCBUeXBlIiBjYXRlZ29yeT0iX0FIQlVSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2ZfeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGV0ZVByZXZpb3VzV29yZCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBQcmV2aW91cyBXb3JkIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHRoZSBwcmV2aW91cyB3b3JkIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dBQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5kZWNsYXJhdGlvbnMuaW4ud29ya3NwYWNlIiBjb21tYW5kTmFtZT0iRGVjbGFyYXRpb24gaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvbW1hbmRzLnNob3dFbGVtZW50SW5UeXBlSGllcmFyY2h5VmlldyIgY29tbWFuZE5hbWU9IlNob3cgSmF2YVNjcmlwdCBFbGVtZW50IFR5cGUgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2hvdyBhIEphdmFTY3JpcHQgZWxlbWVudCBpbiB0aGUgVHlwZSBIaWVyYXJjaHkgdmlldyIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BR19nQWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImVsZW1lbnRSZWYiIG5hbWU9IkphdmFTY3JpcHQgZWxlbWVudCByZWZlcmVuY2UiIHR5cGVJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29tbWFuZHMuamF2YUVsZW1lbnRSZWZlcmVuY2UiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0F5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZGVsaW1pdGVyLnVuaXgiIGNvbW1hbmROYW1lPSJDb252ZXJ0IExpbmUgRGVsaW1pdGVycyB0byBVbml4IChMRiwgXG4sIDBBLCAmI3hiNjspIiBkZXNjcmlwdGlvbj0iQ29udmVydHMgdGhlIGxpbmUgZGVsaW1pdGVycyB0byBVbml4IChMRiwgXG4sIDBBLCAmI3hiNjspIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlZmVyZW5jZXMuaW4ud29ya2luZy5zZXQiIGNvbW1hbmROYW1lPSJSZWZlcmVuY2VzIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0JTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iUmVhZCBBY2Nlc3MgaW4gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlYWQgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhIHdvcmtpbmcgc2V0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dCaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkVkaXQiIGNvbW1hbmROYW1lPSJFZGl0IENvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVwcC5tcGMudWkuY29tbWFuZC5zaG93TWFya2V0cGxhY2VXaXphcmQiIGNvbW1hbmROYW1lPSJFY2xpcHNlIE1hcmtldHBsYWNlIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgRWNsaXBzZSBNYXJrZXRwbGFjZSB3aXphcmQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUdfZ0NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0cmlnZ2VyIiBuYW1lPSJ0cmlnZ2VyIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nQ1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmpzLmdydW50LmNvbW1hbmRzLmdydW50TGF1bmNoIiBjb21tYW5kTmFtZT0iUnVuIGFzIEdydW50IFRhc2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkudG9nZ2xlTWFya09jY3VycmVuY2VzIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEFudCBNYXJrIE9jY3VycmVuY2VzIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyBtYXJrIG9jY3VycmVuY2VzIGluIEFudCBlZGl0b3JzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuYWRkVG9Xb3JraW5nU2V0IiBjb21tYW5kTmFtZT0iQWRkIHRvIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iQWRkcyB0aGUgc2VsZWN0ZWQgb2JqZWN0IHRvIGEgd29ya2luZyBzZXQuIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuY2FsbGhpZXJhcmNoeS52aWV3IiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBDYWxsIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNob3cgdGhlIENhbGwgSGllcmFyY2h5IHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmNvbW1hbmRzLmV4cG9ydCIgY29tbWFuZE5hbWU9IkV4cG9ydCBQcm9maWxlcyBDb21tYW5kIiBkZXNjcmlwdGlvbj0iQ29tbWFuZCB0byBleHBvcnQgY29ubmVjdGlvbiBwcm9maWxlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nRGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5qdW5pdFNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgSlVuaXQgVGVzdCIgZGVzY3JpcHRpb249IkRlYnVnIEpVbml0IFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0R5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS5lZGl0b3Iuc2hvd0NoZWF0U2hlZXRDb21tYW5kIiBjb21tYW5kTmFtZT0iU2hvdyBNYXJrdXAgQ2hlYXQgU2hlZXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0VDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50ZWFtLnVpLlRlYW1TeW5jaHJvbml6aW5nUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJUZWFtIFN5bmNocm9uaXppbmciIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBUZWFtIFN5bmNocm9uaXppbmcgUGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkub3Blbi5kZWNsYXJhdGlvbi5jb21tYW5kIiBjb21tYW5kTmFtZT0iT3BlbiBEZWNsYXJhdGlvbiIgZGVzY3JpcHRpb249Ik9wZW5zIHRoZSBBbnQgZWRpdG9yIG9uIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0VpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmNvbW1hbmRzLm9wZW5Ccm93c2VyRGlhbG9nIiBjb21tYW5kTmFtZT0iT3BlbiBhIFdlYiBicm93c2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHX2dFeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnV0aWxzLnJjcC5saW5rQ29udHJpYnV0aW9uLmhyZWYiIG5hbWU9IlVSSSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nRkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVwcC5tcGMudWkuY29tbWFuZC5zaG93SW5zdGFsbGVkIiBjb21tYW5kTmFtZT0iTWFuYWdlIGluc3RhbGxlZCBwbHVnLWlucyIgZGVzY3JpcHRpb249IlVwZGF0ZSBvciB1bmluc3RhbGwgcGx1Zy1pbnMgaW5zdGFsbGVkIGZyb20gdGhlIE1hcmtldHBsYWNlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dGU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNyZWF0ZS5kZWxlZ2F0ZS5tZXRob2RzIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgRGVsZWdhdGUgTWV0aG9kcyIgZGVzY3JpcHRpb249IkFkZCBkZWxlZ2F0ZSBtZXRob2RzIGZvciBhIHR5cGUncyBmaWVsZHMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0ZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5nZWYudWkucGFsZXR0ZV92aWV3IiBjb21tYW5kTmFtZT0iUGFsZXR0ZSIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nRnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3LnByZWZpeGVzIiBjb21tYW5kTmFtZT0iJmFtcDtFZGl0IE5hbWVzcGFjZSBQcmVmaXhlcyIgY2F0ZWdvcnk9Il9BSEJVT3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nR0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IudG9nZ2xlQ29tbWVudEFjdGlvbiIgY29tbWFuZE5hbWU9IlRvZ2dsZSBDb21tZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dHU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy50YXNrLmNsZWFyQ29udGV4dCIgY29tbWFuZE5hbWU9IkNsZWFyIENvbnRleHQiIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0dpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gud3JpdGUuYWNjZXNzLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iV3JpdGUgQWNjZXNzIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0d5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVhZC5hY2Nlc3MuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iUmVhZCBBY2Nlc3MgaW4gSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWFkIHJlZmVyZW5jZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gaXRzIGhpZXJhcmNoeSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnB1bGwudXAiIGNvbW1hbmROYW1lPSJQdWxsIFVwIiBkZXNjcmlwdGlvbj0iTW92ZSBtZW1iZXJzIHRvIGEgc3VwZXJjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlRvZ2dsZUxpbmVCcmVha3BvaW50IiBjb21tYW5kTmFtZT0iVG9nZ2xlIExpbmUgQnJlYWtwb2ludCIgZGVzY3JpcHRpb249IkNyZWF0ZXMgb3IgcmVtb3ZlcyBhIGxpbmUgYnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nSGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuc2VhcmNoRm9yVGFzayIgY29tbWFuZE5hbWU9IlNlYXJjaCBSZXBvc2l0b3J5IGZvciBUYXNrIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dIeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZm9sZGluZy5jb2xsYXBzZU1lbWJlcnMiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSBNZW1iZXJzIiBkZXNjcmlwdGlvbj0iQ29sbGFwc2UgYWxsIG1lbWJlcnMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0lDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hZGRJbXBvcnQiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgaW1wb3J0IiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0FkZCBpbXBvcnQnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dJU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLndyaXRlLmFjY2Vzcy5pbi5wcm9qZWN0IiBjb21tYW5kTmFtZT0iV3JpdGUgQWNjZXNzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHdyaXRlIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dJaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5pbnRlcm5hbC5yZWZsb2cuQ2hlY2tvdXRDb21tYW5kIiBjb21tYW5kTmFtZT0iQ2hlY2sgT3V0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dJeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5tb3ZlIiBjb21tYW5kTmFtZT0iTW92ZS4uLiIgZGVzY3JpcHRpb249Ik1vdmUgdGhlIHNlbGVjdGVkIGl0ZW0iIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0pDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkucmVmYWN0b3IubWlncmF0ZS5qYXIiIGNvbW1hbmROYW1lPSJNaWdyYXRlIEpBUiBGaWxlIiBkZXNjcmlwdGlvbj0iTWlncmF0ZSBhIEpBUiBGaWxlIHRvIGEgbmV3IHZlcnNpb24iIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0pTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm1heGltaXplUGFydCIgY29tbWFuZE5hbWU9Ik1heGltaXplIFBhcnQiIGRlc2NyaXB0aW9uPSJNYXhpbWl6ZSBQYXJ0IiBjYXRlZ29yeT0iX0FIQlVSU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dKaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2hvdy5vdXRsaW5lIiBjb21tYW5kTmFtZT0iUXVpY2sgT3V0bGluZSIgZGVzY3JpcHRpb249IlNob3cgdGhlIHF1aWNrIG91dGxpbmUgZm9yIHRoZSBlZGl0b3IgaW5wdXQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb21tYW5kcy5vcGVuRWxlbWVudEluRWRpdG9yIiBjb21tYW5kTmFtZT0iT3BlbiBKYXZhU2NyaXB0IEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJPcGVuIGEgSmF2YVNjcmlwdCBlbGVtZW50IGluIGl0cyBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUdfZ0tDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJlbGVtZW50UmVmIiBuYW1lPSJKYXZhU2NyaXB0IGVsZW1lbnQgcmVmZXJlbmNlIiB0eXBlSWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvbW1hbmRzLmphdmFFbGVtZW50UmVmZXJlbmNlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuVHlwZXNWaWV3IiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBUeXBlcyIgZGVzY3JpcHRpb249IlNob3cgdGhlIFR5cGVzIHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0tpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jZnQuc2VydmVyLnVpLmludGVybmFsLmFjdGlvbnMuc2hvd2NvbnNvbGV2aWV3ZXJjb21tYW5kIiBjb21tYW5kTmFtZT0iU2hvdyBSZWNlbnQgTG9ncyIgZGVzY3JpcHRpb249IlNob3cgUmVjZW50IExvZ3MiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ0t5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLmlnbm9yZVdoaXRlU3BhY2UiIGNvbW1hbmROYW1lPSJJZ25vcmUgV2hpdGUgU3BhY2UiIGRlc2NyaXB0aW9uPSJJZ25vcmUgd2hpdGUgc3BhY2Ugd2hlcmUgYXBwbGljYWJsZSIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5pbXBvcnRQcm9qZWN0cyIgY29tbWFuZE5hbWU9IkltcG9ydCBQcm9qZWN0cyIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC53cml0ZS5hY2Nlc3MuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iV3JpdGUgQWNjZXNzIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3Igd3JpdGUgcmVmZXJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5oaWRlVW51c2VkRWxlbWVudHMiIGNvbW1hbmROYW1lPSJIaWRlIFVudXNlZCBFbGVtZW50cyIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5nZW5lcmF0ZS5jb25zdHJ1Y3Rvci51c2luZy5maWVsZHMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBDb25zdHJ1Y3RvciB1c2luZyBGaWVsZHMiIGRlc2NyaXB0aW9uPSJDaG9vc2UgZmllbGRzIHRvIGluaXRpYWxpemUgYW5kIGNvbnN0cnVjdG9yIGZyb20gc3VwZXJjbGFzcyB0byBjYWxsICIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuZGlzYWJsZS5ncmFtbWFyLmNvbnN0cmFpbnRzIiBjb21tYW5kTmFtZT0iVHVybiBvZmYgR3JhbW1hciBDb25zdHJhaW50cyIgZGVzY3JpcHRpb249IlR1cm4gb2ZmIGdyYW1tYXIgQ29uc3RyYWludHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ01TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29tbWFuZHMuc2hvd0VsZW1lbnRJblR5cGVIaWVyYXJjaHlWaWV3IiBjb21tYW5kTmFtZT0iU2hvdyBKYXZhIEVsZW1lbnQgVHlwZSBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTaG93IGEgSmF2YSBlbGVtZW50IGluIHRoZSBUeXBlIEhpZXJhcmNoeSB2aWV3IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FHX2dNaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudFJlZiIgbmFtZT0iSmF2YSBlbGVtZW50IHJlZmVyZW5jZSIgdHlwZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29tbWFuZHMuamF2YUVsZW1lbnRSZWZlcmVuY2UiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ015eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5nb1RvUmVzb3VyY2UiIGNvbW1hbmROYW1lPSJHbyB0byIgZGVzY3JpcHRpb249IkdvIHRvIGEgcGFydGljdWxhciByZXNvdXJjZSBpbiB0aGUgYWN0aXZlIHZpZXciIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ05DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5zdXBlci5pbXBsZW1lbnRhdGlvbiIgY29tbWFuZE5hbWU9Ik9wZW4gU3VwZXIgSW1wbGVtZW50YXRpb24iIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBJbXBsZW1lbnRhdGlvbiBpbiB0aGUgU3VwZXIgVHlwZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5yZXNldFBlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iUmVzZXQgUGVyc3BlY3RpdmUiIGRlc2NyaXB0aW9uPSJSZXNldCB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZSB0byBpdHMgZGVmYXVsdCBzdGF0ZSIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLnF1aWNrT3V0bGluZUNvbW1hbmQiIGNvbW1hbmROYW1lPSJRdWljayBPdXRsaW5lIiBkZXNjcmlwdGlvbj0iT3BlbiBhIHBvcHVwIGRpYWxvZyB3aXRoIGEgcXVpY2sgb3V0bGluZSBvZiB0aGUgY3VycmVudCBkb2N1bWVudCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nTnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWZlcmVuY2VzLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJSZWZlcmVuY2VzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dPQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuTWVtYmVyc1ZpZXciIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IE1lbWJlcnMiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBNZW1iZXJzIHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ09TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LmJ1aWxkTGFzdCIgY29tbWFuZE5hbWU9IlJlcGVhdCBXb3JraW5nIFNldCBCdWlsZCIgZGVzY3JpcHRpb249IlJlcGVhdCB0aGUgbGFzdCB3b3JraW5nIHNldCBidWlsZCIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nT2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnByb2plY3QuYnVpbGRQcm9qZWN0IiBjb21tYW5kTmFtZT0iQnVpbGQgUHJvamVjdCIgZGVzY3JpcHRpb249IkJ1aWxkIHRoZSBzZWxlY3RlZCBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLnV0aWxzLnJjcC5jb21tYW5kcy5vcGVuQnJvd3NlciIgY29tbWFuZE5hbWU9Ik9wZW4gYSBXZWIgYnJvd3NlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BR19nUEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy51dGlscy5yY3AubGlua0NvbnRyaWJ1dGlvbi5ocmVmIiBuYW1lPSJVUkkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUdfZ1BTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5kaXNjb3ZlcnlXaXphcmRDb21tYW5kIiBjb21tYW5kTmFtZT0iRGlzY292ZXJ5IFdpemFyZCIgZGVzY3JpcHRpb249InNob3dzIHRoZSBjb25uZWN0b3IgZGlzY292ZXJ5IHdpemFyZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BR19nUGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLnRleHRTdGFydCIgY29tbWFuZE5hbWU9IlRleHQgU3RhcnQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5sb2NhbEphdmFTaG9ydGN1dC5jb3ZlcmFnZSIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIEphdmEgQXBwbGljYXRpb24iIGRlc2NyaXB0aW9uPSJDb3ZlcmFnZSBKYXZhIEFwcGxpY2F0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FHX2dRQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5wYXN0ZSIgY29tbWFuZE5hbWU9IlBhc3RlIiBkZXNjcmlwdGlvbj0iUGFzdGUgZnJvbSB0aGUgY2xpcGJvYXJkIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZjQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmRlY2xhcmF0aW9ucy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IkRlY2xhcmF0aW9uIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGY1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5yZWZyZXNoQ2FjaGUiIGNvbW1hbmROYW1lPSJSZWZyZXNoIFJlbW90ZSBDYWNoZSIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGY2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24ucXVhbGlmeUZpZWxkIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gUXVhbGlmeSB2YXIgYWNjZXNzIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1F1YWxpZnkgdmFyIGFjY2VzcyciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuamF2YUFwcGxldFNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBKYXZhIEFwcGxldCIgZGVzY3JpcHRpb249IlJ1biBKYXZhIEFwcGxldCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuZXhwb3J0U2Vzc2lvbiIgY29tbWFuZE5hbWU9IkV4cG9ydCBTZXNzaW9uLi4uIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZkU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUucHJldmlvdXMiIGNvbW1hbmROYW1lPSJQcmV2aW91cyIgZGVzY3JpcHRpb249Ik5hdmlnYXRlIHRvIHRoZSBwcmV2aW91cyBpdGVtIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZkaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5zY2FsYVNob3J0Y3V0LmNvdmVyYWdlIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UgU2NhbGEgQXBwbGljYXRpb24iIGRlc2NyaXB0aW9uPSJDb3ZlcmFnZSBTY2FsYSBBcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5jbGVhbiIgY29tbWFuZE5hbWU9IkNsZWFuLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZlQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5yZW5hbWUiIGNvbW1hbmROYW1lPSJSZW5hbWUiIGRlc2NyaXB0aW9uPSJSZW5hbWUgdGhlIHNlbGVjdGVkIGl0ZW0iIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LmJ1aWxkQWxsIiBjb21tYW5kTmFtZT0iQnVpbGQgQWxsIiBkZXNjcmlwdGlvbj0iQnVpbGQgYWxsIHByb2plY3RzIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5Lk9wZW5JblRleHRFZGl0b3JDb21tYW5kIiBjb21tYW5kTmFtZT0iT3BlbiBpbiBUZXh0IEVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuZHVtcEV4ZWN1dGlvbkRhdGEiIGNvbW1hbmROYW1lPSJEdW1wIEV4ZWN1dGlvbiBEYXRhIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZmQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmN1dC5saW5lLnRvLmJlZ2lubmluZyIgY29tbWFuZE5hbWU9IkN1dCB0byBCZWdpbm5pbmcgb2YgTGluZSIgZGVzY3JpcHRpb249IkN1dCB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZmU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0LmVuY2xvc2luZyIgY29tbWFuZE5hbWU9IlNlbGVjdCBFbmNsb3NpbmcgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBlbmNsb3NpbmcgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5jb21tYW5kcy5ydW50YXNrcyIgY29tbWFuZE5hbWU9IlJ1biBHcmFkbGUgVGFza3MiIGRlc2NyaXB0aW9uPSJSdW5zIGFsbCB0aGUgc2VsZWN0ZWQgR3JhZGxlIHRhc2tzIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZmeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnRvZ2dsZUJyZWFkY3J1bWIiIGNvbW1hbmROYW1lPSJUb2dnbGUgSmF2YSBFZGl0b3IgQnJlYWRjcnVtYiIgZGVzY3JpcHRpb249IlRvZ2dsZSB0aGUgSmF2YSBlZGl0b3IgYnJlYWRjcnVtYiIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGZ0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMucmV2aXNpb25zLnJlbmRlcmluZy5jeWNsZSIgY29tbWFuZE5hbWU9IkN5Y2xlIFJldmlzaW9uIENvbG9yaW5nIE1vZGUiIGRlc2NyaXB0aW9uPSJDeWNsZXMgdGhyb3VnaCB0aGUgYXZhaWxhYmxlIGNvbG9yaW5nIG1vZGVzIGZvciByZXZpc2lvbnMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hbnQudWkucmVuYW1lSW5GaWxlIiBjb21tYW5kTmFtZT0iUmVuYW1lIEluIEZpbGUiIGRlc2NyaXB0aW9uPSJSZW5hbWVzIGFsbCByZWZlcmVuY2VzIHdpdGhpbiB0aGUgc2FtZSBidWlsZGZpbGUiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi50eXBlLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9Ik9wZW4gVHlwZSBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJPcGVuIGEgdHlwZSBoaWVyYXJjaHkgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS5zY3JpcHQub3BlbnNvdXJjZSIgY29tbWFuZE5hbWU9Ik9wZW4gU291cmNlIiBkZXNjcmlwdGlvbj0iU2hvd3MgdGhlIEphdmFTY3JpcHQgc291cmNlIGZvciB0aGUgc2VsZWN0ZWQgc2NyaXB0IGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5pbnRlcmZhY2UiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEludGVyZmFjZSIgZGVzY3JpcHRpb249IkV4dHJhY3QgYSBzZXQgb2YgbWVtYmVycyBpbnRvIGEgbmV3IGludGVyZmFjZSBhbmQgdHJ5IHRvIHVzZSB0aGUgbmV3IGludGVyZmFjZSIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGaFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZy5jb21tYW5kcy5tb3ZlUmVzb3VyY2VzIiBjb21tYW5kTmFtZT0iTW92ZSBSZXNvdXJjZXMiIGRlc2NyaXB0aW9uPSJNb3ZlIHRoZSBzZWxlY3RlZCByZXNvdXJjZXMgYW5kIG5vdGlmeSBMVEsgcGFydGljaXBhbnRzLiIgY2F0ZWdvcnk9Il9BSEJVV0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGaGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5hY3Rpb25zLkxpZmVDeWNsZUdlbmVyYXRlU291cmNlcy5ydW4iIGNvbW1hbmROYW1lPSJSdW4gTWF2ZW4gR2VuZXJhdGUgU291cmNlcyIgZGVzY3JpcHRpb249IlJ1biBNYXZlbiBHZW5lcmF0ZSBTb3VyY2VzIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZoeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuU3RlcEludG8iIGNvbW1hbmROYW1lPSJTdGVwIEludG8iIGRlc2NyaXB0aW9uPSJTdGVwIGludG8iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuamF4d3MudWkuY29uZmlndXJlLmhhbmRsZXJzIiBjb21tYW5kTmFtZT0iQ29uZmlndXJlIEhhbmRsZXJzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZpU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkuaW1wb3J0ZXIub3BlbkRpcmVjdG9yeSIgY29tbWFuZE5hbWU9Ik9wZW4gUHJvamVjdHMgZnJvbSBGaWxlIFN5c3RlbS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGaWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3RydWN0dXJlLnNlbGVjdC5wcmV2aW91cyIgY29tbWFuZE5hbWU9IlNlbGVjdCBQcmV2aW91cyBFbGVtZW50IiBkZXNjcmlwdGlvbj0iRXhwYW5kIHNlbGVjdGlvbiB0byBpbmNsdWRlIHByZXZpb3VzIHNpYmxpbmciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRml5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuQWRkRXhjZXB0aW9uQnJlYWtwb2ludCIgY29tbWFuZE5hbWU9IkFkZCBKYXZhIEV4Y2VwdGlvbiBCcmVha3BvaW50IiBkZXNjcmlwdGlvbj0iQWRkIGEgSmF2YSBleGNlcHRpb24gYnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGakN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5vcGVuLmNhbGwuaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iT3BlbiBDYWxsIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249Ik9wZW4gYSBjYWxsIGhpZXJhcmNoeSBvbiB0aGUgc2VsZWN0ZWQgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGalN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0NsZWFyQ3JlZGVudGlhbHMiIGNvbW1hbmROYW1lPSJDbGVhciBDcmVkZW50aWFscyIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGaml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmFkZC5pbXBvcnQiIGNvbW1hbmROYW1lPSJBZGQgSW1wb3J0IiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGltcG9ydCBzdGF0ZW1lbnQgb24gc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZqeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLlRvZ2dsZVRyYWNlcG9pbnQiIGNvbW1hbmROYW1lPSJUb2dnbGUgVHJhY2Vwb2ludCIgZGVzY3JpcHRpb249IkNyZWF0ZXMgb3IgcmVtb3ZlcyBhIHRyYWNlcG9pbnQgICIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGa0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLmNvbnZlcnRUb01hcmt1cENvbW1hbmQiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBNYXJrdXAiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBRmtTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS50YXJnZXRMYW5ndWFnZSIgbmFtZT0iVGFyZ2V0TGFuZ3VhZ2UiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5hZGQudW5pbXBsZW1lbnRlZC5jb25zdHJ1Y3RvcnMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBDb25zdHJ1Y3RvcnMgZnJvbSBTdXBlcmNsYXNzIiBkZXNjcmlwdGlvbj0iRXZhbHVhdGUgYW5kIGFkZCBjb25zdHJ1Y3RvcnMgZnJvbSBzdXBlcmNsYXNzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZreXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5zaG93VG9vbFRpcCIgY29tbWFuZE5hbWU9IlNob3cgVG9vbHRpcCBEZXNjcmlwdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLmJyZWFrcG9pbnQucHJvcGVydGllcyIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgQnJlYWtwb2ludCBQcm9wZXJ0aWVzIiBkZXNjcmlwdGlvbj0iVmlldyBhbmQgZWRpdCB0aGUgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBKYXZhU2NyaXB0IGJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVNpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRmxTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmp1bml0U2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBKVW5pdCBUZXN0IiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgSlVuaXQgVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMudGFzay5jb3B5Q29udGV4dCIgY29tbWFuZE5hbWU9IkNvcHkgQ29udGV4dCIgY2F0ZWdvcnk9Il9BSEJVTEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLnZpZXcudWkuY29tbWFuZC5sYXVuY2hUb29sYmFyIiBjb21tYW5kTmFtZT0iT3BlbiBMb2NhbCBUZXJtaW5hbCBvbiBTZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuc2hvd1ZpZXdNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBWaWV3IE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSB2aWV3IG1lbnUiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tbWl0IiBjb21tYW5kTmFtZT0iQ29tbWl0Li4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmlubGluZSIgY29tbWFuZE5hbWU9IklubGluZSIgZGVzY3JpcHRpb249IklubGluZSBhIGNvbnN0YW50LCBsb2NhbCB2YXJpYWJsZSBvciBtZXRob2QiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2hpZnRSaWdodCIgY29tbWFuZE5hbWU9IlNoaWZ0IFJpZ2h0IiBkZXNjcmlwdGlvbj0iU2hpZnQgYSBibG9jayBvZiB0ZXh0IHRvIHRoZSByaWdodCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLmJhY2t3YXJkSGlzdG9yeSIgY29tbWFuZE5hbWU9IkJhY2t3YXJkIEhpc3RvcnkiIGRlc2NyaXB0aW9uPSJNb3ZlIGJhY2t3YXJkIGluIHRoZSBlZGl0b3IgbmF2aWdhdGlvbiBoaXN0b3J5IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZuU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmltcGxlbWVudG9ycy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IkltcGxlbWVudG9ycyBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgaW1wbGVtZW50b3JzIG9mIHRoZSBzZWxlY3RlZCBpbnRlcmZhY2UgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkud29ya2JlbmNoU2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBFY2xpcHNlIEFwcGxpY2F0aW9uIiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgRWNsaXBzZSBBcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGbnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5yZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UiIGNvbW1hbmROYW1lPSJSZW1vdmUgVHJhaWxpbmcgV2hpdGVzcGFjZSIgZGVzY3JpcHRpb249IlJlbW92ZXMgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb2YgZWFjaCBsaW5lIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZvQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5maW5kSW5jcmVtZW50YWwiIGNvbW1hbmROYW1lPSJJbmNyZW1lbnRhbCBGaW5kIiBkZXNjcmlwdGlvbj0iSW5jcmVtZW50YWwgZmluZCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGb1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uaW5saW5lTG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gSW5saW5lIGxvY2FsIHZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0lubGluZSBsb2NhbCB2YXJpYWJsZSciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRm9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5jb252ZXJ0LmFub255bW91cy50by5uZXN0ZWQiIGNvbW1hbmROYW1lPSJDb252ZXJ0IEFub255bW91cyBDbGFzcyB0byBOZXN0ZWQiIGRlc2NyaXB0aW9uPSJDb252ZXJ0IGFuIGFub255bW91cyBjbGFzcyB0byBhIG5lc3RlZCBjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGb3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkubmV3RW50aXR5IiBjb21tYW5kTmFtZT0iSlBBIEVudGl0eSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGcEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmFzc2lnblRvTG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIHRvIGxvY2FsIHZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0Fzc2lnbiB0byBsb2NhbCB2YXJpYWJsZSciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLkltcG9ydENoYW5nZWRQcm9qZWN0c0NvbW1hbmRJZCIgY29tbWFuZE5hbWU9IkltcG9ydCBDaGFuZ2VkIFByb2plY3RzIiBkZXNjcmlwdGlvbj0iSW1wb3J0IG9yIGNyZWF0ZSBpbiBsb2NhbCBHaXQgcmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGcGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuY29tbWFuZHMuT3BlbkNvdmVyYWdlQ29uZmlndXJhdGlvbiIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIENvbmZpZ3VyYXRpb25zLi4uIiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgQ29uZmlndXJhdGlvbnMuLi4iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJldHVybi5jb250aW51ZS50YXJnZXRzIiBjb21tYW5kTmFtZT0iU2VhcmNoIGJyZWFrL2NvbnRpbnVlIFRhcmdldCBPY2N1cnJlbmNlcyBpbiBGaWxlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBicmVhay9jb250aW51ZSB0YXJnZXQgb2NjdXJyZW5jZXMgb2YgYSBzZWxlY3RlZCB0YXJnZXQgbmFtZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGcUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmZvcm1hdCIgY29tbWFuZE5hbWU9IkZvcm1hdCIgZGVzY3JpcHRpb249IkZvcm1hdCB0aGUgc2VsZWN0ZWQgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGcVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmNoYW5nZS50eXBlIiBjb21tYW5kTmFtZT0iR2VuZXJhbGl6ZSBEZWNsYXJlZCBUeXBlIiBkZXNjcmlwdGlvbj0iQ2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZiBhIHNlbGVjdGVkIHZhcmlhYmxlIHRvIGEgbW9yZSBnZW5lcmFsIHR5cGUgY29uc2lzdGVudCB3aXRoIHVzYWdlIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZxaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNyZWF0ZS5nZXR0ZXIuc2V0dGVyIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgR2V0dGVycyBhbmQgU2V0dGVycyIgZGVzY3JpcHRpb249IkdlbmVyYXRlIEdldHRlciBhbmQgU2V0dGVyIG1ldGhvZHMgZm9yIHR5cGUncyBmaWVsZHMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuZWRpdC50ZXh0LmZvcm1hdCIgY29tbWFuZE5hbWU9IkZvcm1hdCBTb3VyY2UiIGRlc2NyaXB0aW9uPSJGb3JtYXQgYSBQREUgU291cmNlIFBhZ2UiIGNhdGVnb3J5PSJfQUhCVVBpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMucmVzdWx0LnRlcm1pbmF0ZSIgY29tbWFuZE5hbWU9IlRlcm1pbmF0ZSBSZXN1bHQiIGNhdGVnb3J5PSJfQUhCVU5DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0Lm5leHQiIGNvbW1hbmROYW1lPSJTZWxlY3QgTmV4dCBFbGVtZW50IiBkZXNjcmlwdGlvbj0iRXhwYW5kIHNlbGVjdGlvbiB0byBpbmNsdWRlIG5leHQgc2libGluZyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGcml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld05ld1JlbW90ZSIgY29tbWFuZE5hbWU9IkNyZWF0ZSBSZW1vdGUuLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5nZW5lcmF0ZS5oYXNoY29kZS5lcXVhbHMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBoYXNoQ29kZSgpIGFuZCBlcXVhbHMoKSIgZGVzY3JpcHRpb249IkdlbmVyYXRlcyBoYXNoQ29kZSgpIGFuZCBlcXVhbHMoKSBmdW5jdGlvbnMgZm9yIHRoZSB0eXBlIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuUmVzdGFydCIgY29tbWFuZE5hbWU9IlJlc3RhcnQiIGRlc2NyaXB0aW9uPSJSZXN0YXJ0IGEgcHJvY2VzcyBvciBkZWJ1ZyB0YXJnZXQgd2l0aG91dCB0ZXJtaW5hdGluZyBhbmQgcmUtbGF1bmNoaW5nIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGV0ZS5saW5lIiBjb21tYW5kTmFtZT0iRGVsZXRlIExpbmUiIGRlc2NyaXB0aW9uPSJEZWxldGUgYSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5vcmdhbml6ZS5pbXBvcnRzIiBjb21tYW5kTmFtZT0iT3JnYW5pemUgSW1wb3J0cyIgZGVzY3JpcHRpb249IkV2YWx1YXRlIGFsbCByZXF1aXJlZCBpbXBvcnRzIGFuZCByZXBsYWNlIHRoZSBjdXJyZW50IGltcG9ydHMiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEucmVtb3ZlLmJsb2NrLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJSZW1vdmUgQmxvY2sgQ29tbWVudCIgZGVzY3JpcHRpb249IlJlbW92ZSB0aGUgYmxvY2sgY29tbWVudCBlbmNsb3NpbmcgdGhlIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5vcGVuLmltcGxlbWVudGF0aW9uIiBjb21tYW5kTmFtZT0iT3BlbiBJbXBsZW1lbnRhdGlvbiIgZGVzY3JpcHRpb249Ik9wZW5zIHRoZSBJbXBsZW1lbnRhdGlvbnMgb2YgYSBtZXRob2Qgb3IgYSB0eXBlIGluIGl0cyBoaWVyYXJjaHkiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuZ290b1Rlc3QiIGNvbW1hbmROYW1lPSJSZWZlcnJpbmcgVGVzdHMiIGRlc2NyaXB0aW9uPSJSZWZlcnJpbmcgVGVzdHMiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZmluZC5icm9rZW4ubmxzLmtleXMiIGNvbW1hbmROYW1lPSJGaW5kIEJyb2tlbiBFeHRlcm5hbGl6ZWQgU3RyaW5ncyIgZGVzY3JpcHRpb249IkZpbmRzIHVuZGVmaW5lZCwgZHVwbGljYXRlIGFuZCB1bnVzZWQgZXh0ZXJuYWxpemVkIHN0cmluZyBrZXlzIGluIHByb3BlcnR5IGZpbGVzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5vcGVuU2Vzc2lvbkV4ZWN1dGlvbkRhdGEiIGNvbW1hbmROYW1lPSJPcGVuIEV4ZWN1dGlvbiBEYXRhIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvbW1hbmRzLnNob3dFbGVtZW50SW5QYWNrYWdlVmlldyIgY29tbWFuZE5hbWU9IlNob3cgSmF2YSBFbGVtZW50IGluIFBhY2thZ2UgRXhwbG9yZXIiIGRlc2NyaXB0aW9uPSJTZWxlY3QgSmF2YSBlbGVtZW50IGluIHRoZSBQYWNrYWdlIEV4cGxvcmVyIHZpZXciIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBRnVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJlbGVtZW50UmVmIiBuYW1lPSJKYXZhIGVsZW1lbnQgcmVmZXJlbmNlIiB0eXBlSWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb21tYW5kcy5qYXZhRWxlbWVudFJlZmVyZW5jZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5wZXJmb3JtRHJvcGRvd24iIGNvbW1hbmROYW1lPSJQZXJmb3JtIERyb3Bkb3duIiBjYXRlZ29yeT0iX0FIQlVSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ1eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkluc3RhbmNlQ291bnQiIGNvbW1hbmROYW1lPSJJbnN0YW5jZSBDb3VudCIgZGVzY3JpcHRpb249IlZpZXcgdGhlIGluc3RhbmNlIGNvdW50IG9mIHRoZSBzZWxlY3RlZCB0eXBlIGxvYWRlZCBpbiB0aGUgdGFyZ2V0IFZNIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuY3JlYXRlLmdldHRlci5zZXR0ZXIiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBHZXR0ZXJzIGFuZCBTZXR0ZXJzIiBkZXNjcmlwdGlvbj0iR2VuZXJhdGUgR2V0dGVyIGFuZCBTZXR0ZXIgZnVuY3Rpb25zIGZvciB0eXBlJ3MgdmFycyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGdlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuZmluZFJlcGxhY2UiIGNvbW1hbmROYW1lPSJGaW5kIGFuZCBSZXBsYWNlIiBkZXNjcmlwdGlvbj0iRmluZCBhbmQgcmVwbGFjZSB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ2aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLk1lcmdlVG9vbCIgY29tbWFuZE5hbWU9Ik1lcmdlIFRvb2wiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuYWRkQWxsUGx1Z2luc1RvSmF2YVNlYXJjaCIgY29tbWFuZE5hbWU9IkFkZCBBbGwgUGx1Zy1pbnMgdG8gSmF2YSBTZWFyY2giIGRlc2NyaXB0aW9uPSJBZGRzIGFsbCBwbHVnLWlucyBpbiB0aGUgdGFyZ2V0IHBsYXRmb3JtIHRvIGphdmEgc2VhcmNoIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21tYW5kLnNoYXJlUHJvamVjdCIgY29tbWFuZE5hbWU9IlNoYXJlIHdpdGggR2l0IiBkZXNjcmlwdGlvbj0iU2hhcmUgdGhlIHByb2plY3QgdXNpbmcgR2l0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUZ3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21tYW5kLnByb2plY3ROYW1lUGFyYW1ldGVyIiBuYW1lPSJQcm9qZWN0IiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNvbnZlcnQuYW5vbnltb3VzLnRvLm5lc3RlZCIgY29tbWFuZE5hbWU9IkNvbnZlcnQgQW5vbnltb3VzIENsYXNzIHRvIE5lc3RlZCIgZGVzY3JpcHRpb249IkNvbnZlcnQgYW4gYW5vbnltb3VzIGNsYXNzIHRvIGEgbmVzdGVkIGNsYXNzIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLnF1aWNrT3V0bGluZSIgY29tbWFuZE5hbWU9IlF1aWNrIE91dGxpbmUiIGRlc2NyaXB0aW9uPSJPcGVuIGEgcXVpY2sgb3V0bGluZSBwb3B1cCBkaWFsb2cgZm9yIGEgZ2l2ZW4gZWRpdG9yIGlucHV0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmZ1bGxzY3JlZW5tb2RlIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEZ1bGwgU2NyZWVuIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gZnVsbCBzY3JlZW4gYW5kIG5vcm1hbCIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIudWkuc2RrLmluc3RhbGxhdGlvbkRldGFpbHMiIGNvbW1hbmROYW1lPSJJbnN0YWxsYXRpb24gRGV0YWlscyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0udWkuc3luY2hyb25pemVBbGwiIGNvbW1hbmROYW1lPSJTeW5jaHJvbml6ZS4uLiIgZGVzY3JpcHRpb249IlN5bmNocm9uaXplIHJlc291cmNlcyBpbiB0aGUgd29ya3NwYWNlIHdpdGggYW5vdGhlciBsb2NhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGeHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5wcm9maWxlcy51aS5jb21tYW5kcy5zZWxlY3RNYXZlblByb2ZpbGVDb21tYW5kIiBjb21tYW5kTmFtZT0iU2VsZWN0IE1hdmVuIFByb2ZpbGVzIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ5Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93Lm5leHRFZGl0b3IiIGNvbW1hbmROYW1lPSJOZXh0IEVkaXRvciIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgbmV4dCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmludGVybmFsLnJlZmxvZy5Db3B5Q29tbWFuZCIgY29tbWFuZE5hbWU9IkNvcHkgQ29tbWl0IElkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5uZXcuc3VidGFzayIgY29tbWFuZE5hbWU9Ik5ldyBTdWJ0YXNrIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YUJyb3dzaW5nUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEJyb3dzaW5nIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgSmF2YVNjcmlwdCBCcm93c2luZyBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVVnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGekN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmhlbHAuaGVscENvbnRlbnRzIiBjb21tYW5kTmFtZT0iSGVscCBDb250ZW50cyIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIGhlbHAgY29udGVudHMiIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5yZW1vdmUuYmxvY2suY29tbWVudCIgY29tbWFuZE5hbWU9IlJlbW92ZSBCbG9jayBDb21tZW50IiBkZXNjcmlwdGlvbj0iUmVtb3ZlIHRoZSBibG9jayBjb21tZW50IGVuY2xvc2luZyB0aGUgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUZ6aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlJlc2V0IiBjb21tYW5kTmFtZT0iUmVzZXQuLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRnp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmRlbGV0ZSIgY29tbWFuZE5hbWU9IkRlbGV0ZSIgZGVzY3JpcHRpb249IkRlbGV0ZSB0aGUgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGV0ZS5saW5lLnRvLmJlZ2lubmluZyIgY29tbWFuZE5hbWU9IkRlbGV0ZSB0byBCZWdpbm5pbmcgb2YgTGluZSIgZGVzY3JpcHRpb249IkRlbGV0ZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlJlbmFtZUJyYW5jaCIgY29tbWFuZE5hbWU9IlJlbmFtZSBCcmFuY2guLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uU3luY2hyb25pemUiIGNvbW1hbmROYW1lPSJTeW5jaHJvbml6ZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guZGVjbGFyYXRpb25zLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iRGVjbGFyYXRpb24gaW4gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhIHdvcmtpbmcgc2V0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYxQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEucmVmYWN0b3IucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBSZWZhY3RvciBRdWljayBNZW51IiBkZXNjcmlwdGlvbj0iU2hvd3MgdGhlIHJlZmFjdG9yIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmZpbmRQcmV2aW91cyIgY29tbWFuZE5hbWU9IkZpbmQgUHJldmlvdXMiIGRlc2NyaXB0aW9uPSJGaW5kIHByZXZpb3VzIGl0ZW0iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ub2dnbGVCcmVha3BvaW50IiBjb21tYW5kTmFtZT0iVG9nZ2xlIEJyZWFrcG9pbnQiIGRlc2NyaXB0aW9uPSJDcmVhdGVzIG9yIHJlbW92ZXMgYSBicmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXQuUmV2ZXJ0IiBjb21tYW5kTmFtZT0iUmV2ZXJ0IENvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LlN0YXNoRHJvcCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBTdGFzaGVkIENvbW1pdC4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGMlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQub3BlblRhc2siIGNvbW1hbmROYW1lPSJPcGVuIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2Nyb2xsLmxpbmVVcCIgY29tbWFuZE5hbWU9IlNjcm9sbCBMaW5lIFVwIiBkZXNjcmlwdGlvbj0iU2Nyb2xsIHVwIG9uZSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZWN0Lmxhc3QiIGNvbW1hbmROYW1lPSJSZXN0b3JlIExhc3QgU2VsZWN0aW9uIiBkZXNjcmlwdGlvbj0iUmVzdG9yZSBsYXN0IHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGM0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmphdmEudWkuZWRpdG9yLmZvbGRpbmcuYXV0byIgY29tbWFuZE5hbWU9IlRvZ2dsZSBBY3RpdmUgRm9sZGluZyIgZGVzY3JpcHRpb249IlRvZ2dsZSBBY3RpdmUgRm9sZGluZyIgY2F0ZWdvcnk9Il9BSEJVU1N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGM1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLnNweS5jb21tYW5kcy5zcHlDb21tYW5kIiBjb21tYW5kTmFtZT0iUGx1Zy1pbiBTZWxlY3Rpb24gU3B5IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgUGx1Zy1pbiBTcHkiIGNhdGVnb3J5PSJfQUhCVVd5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5jbGVhbi51cCIgY29tbWFuZE5hbWU9IkNsZWFuIFVwIiBkZXNjcmlwdGlvbj0iU29sdmUgcHJvYmxlbXMgYW5kIGltcHJvdmUgY29kZSBzdHlsZSBvbiBzZWxlY3RlZCByZXNvdXJjZXMiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZm9sZGluZy50b2dnbGUiIGNvbW1hbmROYW1lPSJUb2dnbGUgRm9sZGluZyIgZGVzY3JpcHRpb249IlRvZ2dsZXMgZm9sZGluZyBpbiB0aGUgY3VycmVudCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQudG9nZ2xlU2hvd1doaXRlc3BhY2VDaGFyYWN0ZXJzIiBjb21tYW5kTmFtZT0iU2hvdyBXaGl0ZXNwYWNlIENoYXJhY3RlcnMiIGRlc2NyaXB0aW9uPSJTaG93cyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gY3VycmVudCB0ZXh0IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGNFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUucmV2ZXJ0IiBjb21tYW5kTmFtZT0iUmV2ZXJ0IiBkZXNjcmlwdGlvbj0iUmV2ZXJ0IHRvIHRoZSBsYXN0IHNhdmVkIHN0YXRlIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGgudWkuVG9nZ2xlT2ZmbGluZU1vZGUiIGNvbW1hbmROYW1lPSJUb2dnbGUgT2ZmbGluZSBNb2RlIiBjYXRlZ29yeT0iX0FIQlVQeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguc2V0dXAuZWRpdG9yLm9wZW5Mb2ciIGNvbW1hbmROYW1lPSJPcGVuIFNldHVwIExvZyIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGNUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnByb2plY3QuYnVpbGRBdXRvbWF0aWNhbGx5IiBjb21tYW5kTmFtZT0iQnVpbGQgQXV0b21hdGljYWxseSIgZGVzY3JpcHRpb249IlRvZ2dsZSB0aGUgd29ya3NwYWNlIGJ1aWxkIGF1dG9tYXRpY2FsbHkgZnVuY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmltcG9ydCIgY29tbWFuZE5hbWU9IkltcG9ydCIgZGVzY3JpcHRpb249IkltcG9ydCIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFGNWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImltcG9ydFdpemFyZElkIiBuYW1lPSJJbXBvcnQgV2l6YXJkIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGNXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5NZXJnZSIgY29tbWFuZE5hbWU9Ik1lcmdlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnN3aXRjaFRvRWRpdG9yIiBjb21tYW5kTmFtZT0iU3dpdGNoIHRvIEVkaXRvciIgZGVzY3JpcHRpb249IlN3aXRjaCB0byBhbiBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5maW5kLmJyb2tlbi5ubHMua2V5cyIgY29tbWFuZE5hbWU9IkZpbmQgQnJva2VuIEV4dGVybmFsaXplZCBTdHJpbmdzIiBkZXNjcmlwdGlvbj0iRmluZHMgdW5kZWZpbmVkLCBkdXBsaWNhdGUgYW5kIHVudXNlZCBleHRlcm5hbGl6ZWQgc3RyaW5nIGtleXMgaW4gcHJvcGVydHkgZmlsZXMiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLmR5bmFtaWNIZWxwIiBjb21tYW5kTmFtZT0iU2hvdyBDb250ZXh0dWFsIEhlbHAiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBjb250ZXh0dWFsIGhlbHAiIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuY29tbWVudCIgY29tbWFuZE5hbWU9IkNvbW1lbnQiIGRlc2NyaXB0aW9uPSJUdXJuIHRoZSBzZWxlY3RlZCBsaW5lcyBpbnRvIEphdmEgY29tbWVudHMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLmFjdGl2YXRlVGFzayIgY29tbWFuZE5hbWU9IkFjdGl2YXRlIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuQ3JlYXRlVGFnIiBjb21tYW5kTmFtZT0iQ3JlYXRlIFRhZy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGN2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gub2NjdXJyZW5jZXMuaW4uZmlsZS5xdWlja01lbnUiIGNvbW1hbmROYW1lPSJTaG93IE9jY3VycmVuY2VzIGluIEZpbGUgUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBPY2N1cnJlbmNlcyBpbiBGaWxlIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5nb3RvLm5leHQubWVtYmVyIiBjb21tYW5kTmFtZT0iR28gdG8gTmV4dCBNZW1iZXIiIGRlc2NyaXB0aW9uPSJNb3ZlIHRoZSBjYXJldCB0byB0aGUgbmV4dCBtZW1iZXIgb2YgdGhlIEphdmFTY3JpcHQgZmlsZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVJbnNlcnRNb2RlIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEluc2VydCBNb2RlIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIGluc2VydCBtb2RlIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3RGVsZXRlIiBjb21tYW5kTmFtZT0iRGVsZXRlIFJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRjhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmNsb3NlUGFydCIgY29tbWFuZE5hbWU9IkNsb3NlIFBhcnQiIGRlc2NyaXB0aW9uPSJDbG9zZSB0aGUgYWN0aXZlIHdvcmtiZW5jaCBwYXJ0IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy5yZXZpc2lvbnMuaWQudG9nZ2xlIiBjb21tYW5kTmFtZT0iVG9nZ2xlIFJldmlzaW9uIElkIERpc3BsYXkiIGRlc2NyaXB0aW9uPSJUb2dnbGVzIHRoZSBkaXNwbGF5IG9mIHRoZSByZXZpc2lvbiBpZCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnByb2plY3QuY2xlYW5BY3Rpb24iIGNvbW1hbmROYW1lPSJCdWlsZCBDbGVhbiIgZGVzY3JpcHRpb249IkRpc2NhcmQgb2xkIGJ1aWx0IHN0YXRlIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuYmFjayIgY29tbWFuZE5hbWU9IkJhY2siIGRlc2NyaXB0aW9uPSJOYXZpZ2F0ZSBiYWNrIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUY5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC53b3JkTmV4dCIgY29tbWFuZE5hbWU9IlNlbGVjdCBOZXh0IFdvcmQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdGhlIG5leHQgd29yZCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGOXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhQnJvd3NpbmdQZXJzcGVjdGl2ZSIgY29tbWFuZE5hbWU9IkphdmEgQnJvd3NpbmciIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBKYXZhIEJyb3dzaW5nIHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVWeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ucGFnZURvd24iIGNvbW1hbmROYW1lPSJQYWdlIERvd24iIGRlc2NyaXB0aW9uPSJHbyBkb3duIG9uZSBwYWdlIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUYtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmltcGxlbWVudG9ycy5pbi5wcm9qZWN0IiBjb21tYW5kTmFtZT0iSW1wbGVtZW50b3JzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudG9ycyBvZiB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlIGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGLWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRlYW0udWkuY29tbWFuZHMuQ29weUNvbW1pdE1lc3NhZ2UiIGNvbW1hbmROYW1lPSJDb3B5IENvbW1pdCBNZXNzYWdlIGZvciBUYXNrIiBkZXNjcmlwdGlvbj0iQ29waWVzIGEgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFzayB0byB0aGUgY2xpcGJvYXJkLiIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGLXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkucmVsYXVuY2hTZXNzaW9uIiBjb21tYW5kTmFtZT0iUmVsYXVuY2ggQ292ZXJhZ2UgU2Vzc2lvbiIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGX0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5HYXJiYWdlQ29sbGVjdCIgY29tbWFuZE5hbWU9IkNvbGxlY3QgR2FyYmFnZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGX1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5Db21wYXJlV2l0aFdvcmtpbmdUcmVlIiBjb21tYW5kTmFtZT0iQ29tcGFyZSB3aXRoIFdvcmtpbmcgVHJlZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFGX2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5CcmFuY2giIGNvbW1hbmROYW1lPSJCcmFuY2giIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBRl95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5Qcm9qZWN0c1ZpZXciIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IFByb2plY3RzIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgUHJvamVjdHMgdmlldyIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHQUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucHJldmlvdXNTaWJsaW5nIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgU2libGluZyIgZGVzY3JpcHRpb249IkdvIHRvIFByZXZpb3VzIFNpYmxpbmciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0FTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDb25maWd1cmVQdXNoIiBjb21tYW5kTmFtZT0iQ29uZmlndXJlIFB1c2guLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0FpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmZpbmRJbmNyZW1lbnRhbFJldmVyc2UiIGNvbW1hbmROYW1lPSJJbmNyZW1lbnRhbCBGaW5kIFJldmVyc2UiIGRlc2NyaXB0aW9uPSJJbmNyZW1lbnRhbCBmaW5kIHJldmVyc2UiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0F5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcHAubXBjLnVpLmNvbW1hbmQuaW1wb3J0RmF2b3JpdGVzV2l6YXJkIiBjb21tYW5kTmFtZT0iSW1wb3J0IE1hcmtldHBsYWNlIEZhdm9yaXRlcyIgZGVzY3JpcHRpb249IkltcG9ydCBhbm90aGVyIHVzZXIncyBNYXJrZXRwbGFjZSBGYXZvcml0ZXMgTGlzdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHQkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImZhdm9yaXRlc1VybCIgbmFtZT0iZmF2b3JpdGVzVXJsIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHQlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmludHJvZHVjZS5mYWN0b3J5IiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIEZhY3RvcnkiIGRlc2NyaXB0aW9uPSJJbnRyb2R1Y2UgYSBmYWN0b3J5IGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGludm9jYXRpb24gb2YgdGhlIHNlbGVjdGVkIGNvbnN0cnVjdG9yIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdCaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLmFudFNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBBbnQgQnVpbGQiIGRlc2NyaXB0aW9uPSJSdW4gQW50IEJ1aWxkIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdCeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5jb252ZXJ0QW5vbnltb3VzVG9Mb2NhbC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBDb252ZXJ0IGFub255bW91cyB0byBsb2NhbCBjbGFzcyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdDb252ZXJ0IGFub255bW91cyB0byBsb2NhbCBjbGFzcyciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uc3Rhc2guYXBwbHkiIGNvbW1hbmROYW1lPSJBcHBseSBTdGFzaGVkIENoYW5nZXMiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0NTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuSW5zcGVjdCIgY29tbWFuZE5hbWU9Ikluc3BlY3QiIGRlc2NyaXB0aW9uPSJJbnNwZWN0IHJlc3VsdCBvZiBldmFsdWF0aW5nIHNlbGVjdGVkIHRleHQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by5jb2x1bW5OZXh0IiBjb21tYW5kTmFtZT0iTmV4dCBDb2x1bW4iIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgbmV4dCBjb2x1bW4iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0N5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuU3F1YXNoIiBjb21tYW5kTmFtZT0iU3F1YXNoIENvbW1pdHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0RDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkucGVyZm9ybVRleHRTZWFyY2hXb3JraW5nU2V0IiBjb21tYW5kTmFtZT0iRmluZCBUZXh0IGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoZXMgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHNldCBmb3Igc3BlY2lmaWMgdGV4dC4iIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gub2NjdXJyZW5jZXMuaW4uZmlsZS5xdWlja01lbnUiIGNvbW1hbmROYW1lPSJTaG93IE9jY3VycmVuY2VzIGluIEZpbGUgUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBPY2N1cnJlbmNlcyBpbiBGaWxlIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by53b3JkTmV4dCIgY29tbWFuZE5hbWU9Ik5leHQgV29yZCIgZGVzY3JpcHRpb249IkdvIHRvIHRoZSBuZXh0IHdvcmQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0R5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmNvbnZlcnRMb2NhbFRvRmllbGQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQ29udmVydCBsb2NhbCB2YXJpYWJsZSB0byB2YXIiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQ29udmVydCBsb2NhbCB2YXJpYWJsZSB0byB2YXInIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdFQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEubW92ZS5lbGVtZW50IiBjb21tYW5kTmFtZT0iTW92ZSAtIFJlZmFjdG9yaW5nICIgZGVzY3JpcHRpb249Ik1vdmUgdGhlIHNlbGVjdGVkIGVsZW1lbnQgdG8gYSBuZXcgbG9jYXRpb24iIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5xdWlja2RpZmYudG9nZ2xlIiBjb21tYW5kTmFtZT0iUXVpY2sgRGlmZiBUb2dnbGUiIGRlc2NyaXB0aW9uPSJUb2dnbGVzIHF1aWNrIGRpZmYgaW5mb3JtYXRpb24gZGlzcGxheSBvbiB0aGUgbGluZSBudW1iZXIgcnVsZXIiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0VpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZGVsZXRlTmV4dCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBOZXh0IiBkZXNjcmlwdGlvbj0iRGVsZXRlIHRoZSBuZXh0IGNoYXJhY3RlciIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHRXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuRmV0Y2hHZXJyaXRDaGFuZ2UiIGNvbW1hbmROYW1lPSJGZXRjaCBGcm9tIEdlcnJpdCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHRkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuanVuaXRSQVBTaG9ydGN1dC5jb3ZlcmFnZSIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIFJBUCBKVW5pdCBUZXN0IiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgUkFQIEpVbml0IFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0ZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLlN5bmNocm9uaXplQWxsIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUgQ2hhbmdlZCIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHRml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kcy5XYXRjaCIgY29tbWFuZE5hbWU9IldhdGNoIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIG5ldyB3YXRjaCBleHByZXNzaW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdGeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlJld29yZCIgY29tbWFuZE5hbWU9IlJld29yZCBDb21taXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0dDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC5jb250ZXh0LnVpLmVkaXRvci5mb2xkaW5nLmF1dG8iIGNvbW1hbmROYW1lPSJUb2dnbGUgQWN0aXZlIEZvbGRpbmciIGRlc2NyaXB0aW9uPSJUb2dnbGUgQWN0aXZlIEZvbGRpbmciIGNhdGVnb3J5PSJfQUhCVU1DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0dTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uT3BlbkNvbW1pdCIgY29tbWFuZE5hbWU9Ik9wZW4gR2l0IENvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHR2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuc3RvcCIgY29tbWFuZE5hbWU9IlN0b3AiIGRlc2NyaXB0aW9uPSJTdG9wIHRoZSBzZXJ2ZXIiIGNhdGVnb3J5PSJfQUhCVUx5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0d5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLmRpc3BsYXlIZWxwIiBjb21tYW5kTmFtZT0iRGlzcGxheSBIZWxwIiBkZXNjcmlwdGlvbj0iRGlzcGxheSBhIEhlbHAgdG9waWMiIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR0hDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJocmVmIiBuYW1lPSJIZWxwIHRvcGljIGhyZWYiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdIU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC5wYWdlRG93biIgY29tbWFuZE5hbWU9IlNlbGVjdCBQYWdlIERvd24iIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3Rvci5jcmVhdGUucmVmYWN0b3Jpbmcuc2NyaXB0IiBjb21tYW5kTmFtZT0iQ3JlYXRlIFNjcmlwdCIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIHJlZmFjdG9yaW5nIHNjcmlwdCBmcm9tIHJlZmFjdG9yaW5ncyBvbiB0aGUgbG9jYWwgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdIeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmpvaW4ubGluZXMiIGNvbW1hbmROYW1lPSJKb2luIExpbmVzIiBkZXNjcmlwdGlvbj0iSm9pbiBsaW5lcyBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5zYXZlQXNUZW1wbGF0ZUFjdGlvbiIgY29tbWFuZE5hbWU9IlNhdmUgYXMgVGVtcGxhdGUiIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0lTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5lZGl0b3IiIGNvbW1hbmROYW1lPSJPcGVuIERlY2xhcmF0aW9uIiBkZXNjcmlwdGlvbj0iT3BlbiBhbiBlZGl0b3Igb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0lpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuc2hvd0NvbnRleHRNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBDb250ZXh0IE1lbnUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBjb250ZXh0IG1lbnUiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0l5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5sb2NhbC52YXJpYWJsZSIgY29tbWFuZE5hbWU9IkV4dHJhY3QgTG9jYWwgVmFyaWFibGUiIGRlc2NyaXB0aW9uPSJFeHRyYWN0cyBhbiBleHByZXNzaW9uIGludG8gYSBuZXcgbG9jYWwgdmFyaWFibGUgYW5kIHVzZXMgdGhlIG5ldyBsb2NhbCB2YXJpYWJsZSIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnAyLnVpLkV4cGxvcmVSZXBvc2l0b3J5IiBjb21tYW5kTmFtZT0iRXhwbG9yZSBSZXBvc2l0b3J5IiBjYXRlZ29yeT0iX0FIQlVPQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdKU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkluc3RhbGxMZnNMb2NhbCIgY29tbWFuZE5hbWU9IkVuYWJsZSBMRlMgbG9jYWxseSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHSml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3Rvci5zaG93LnJlZmFjdG9yaW5nLmhpc3RvcnkiIGNvbW1hbmROYW1lPSJPcGVuIFJlZmFjdG9yaW5nIEhpc3RvcnkgIiBkZXNjcmlwdGlvbj0iT3BlbnMgdGhlIHJlZmFjdG9yaW5nIGhpc3RvcnkiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVhZCByZWZlcmVuY2VzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGl0cyBoaWVyYXJjaHkiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0tDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuY29ycmVjdGlvbi5hc3Npc3QucHJvcG9zYWxzIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IiBkZXNjcmlwdGlvbj0iU3VnZ2VzdCBwb3NzaWJsZSBmaXhlcyBmb3IgYSBwcm9ibGVtIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3MubG9nLmpkdC5zaG93aW5jb25zb2xlIiBjb21tYW5kTmFtZT0iJmFtcDtTaG93IEluIENvbnNvbGUiIGRlc2NyaXB0aW9uPSJTaG93IFN0YWNrIFRyYWNlIGluIENvbnNvbGUgVmlldyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHS2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5wdXNoLmRvd24iIGNvbW1hbmROYW1lPSJQdXNoIERvd24iIGRlc2NyaXB0aW9uPSJNb3ZlIG1lbWJlcnMgdG8gc3ViY2xhc3NlcyIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHS3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5uZXh0UGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJOZXh0IFBlcnNwZWN0aXZlIiBkZXNjcmlwdGlvbj0iU3dpdGNoIHRvIHRoZSBuZXh0IHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdMQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5VcGRhdGVSZXBvc2l0b3J5Q29uZmlndXJhdGlvbiIgY29tbWFuZE5hbWU9IlVwZGF0ZSBSZXBvc2l0b3J5IENvbmZpZ3VyYXRpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR0xTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5TdGFzaEFwcGx5IiBjb21tYW5kTmFtZT0iQXBwbHkgU3Rhc2hlZCBDaGFuZ2VzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC53cml0ZS5hY2Nlc3MuaW4ud29ya2luZy5zZXQiIGNvbW1hbmROYW1lPSJXcml0ZSBBY2Nlc3MgaW4gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHdyaXRlIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5TaG93VmVyc2lvbnMiIGNvbW1hbmROYW1lPSJPcGVuIHRoaXMgVmVyc2lvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHTUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5Db21wYXJlTW9kZSIgbmFtZT0iQ29tcGFyZSBtb2RlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLm5leHRUYWIiIGNvbW1hbmROYW1lPSJOZXh0IFRhYiIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgbmV4dCB0YWIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR01peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucXVpY2tBY2Nlc3MiIGNvbW1hbmROYW1lPSJRdWljayBBY2Nlc3MiIGRlc2NyaXB0aW9uPSJRdWlja2x5IGFjY2VzcyBVSSBlbGVtZW50cyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHTXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zaG93SW5mb3JtYXRpb24iIGNvbW1hbmROYW1lPSJTaG93IFRvb2x0aXAgRGVzY3JpcHRpb24iIGRlc2NyaXB0aW9uPSJEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgY2FyZXQgbG9jYXRpb24gaW4gYSBmb2N1c2VkIGhvdmVyIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdOQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmFkZC5pbXBvcnQiIGNvbW1hbmROYW1lPSJBZGQgSW1wb3J0IiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGltcG9ydCBzdGF0ZW1lbnQgb24gc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdOU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5hdHRhY2htZW50Lm9wZW4iIGNvbW1hbmROYW1lPSJPcGVuIEF0dGFjaG1lbnQiIGNhdGVnb3J5PSJfQUhCVVJTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR05peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmV4dHJhY3RMb2NhbC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBFeHRyYWN0IGxvY2FsIHZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0V4dHJhY3QgbG9jYWwgdmFyaWFibGUnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdOeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5yZW5hbWVJbkZpbGUuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gUmVuYW1lIGluIGZpbGUiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnUmVuYW1lIGluIGZpbGUnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdPQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMudG9nZ2xlTWVtb3J5TW9uaXRvcnNQYW5lIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE1lbW9yeSBNb25pdG9ycyBQYW5lIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIHZpc2liaWxpdHkgb2YgdGhlIE1lbW9yeSBNb25pdG9ycyBQYW5lIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5Db25maWd1cmVVcHN0cmVhbUZldGNoIiBjb21tYW5kTmFtZT0iQ29uZmlndXJlIFVwc3RyZWFtIEZldGNoIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdPaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5pbXBsZW1lbnRvcnMuaW4ud29ya2luZy5zZXQiIGNvbW1hbmROYW1lPSJJbXBsZW1lbnRvcnMgaW4gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudG9ycyBvZiB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlIGluIGEgd29ya2luZyBzZXQiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR095eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uRGlzY2FyZCIgY29tbWFuZE5hbWU9IlJlcGxhY2Ugd2l0aCBGaWxlIGluIEluZGV4IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdQQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5yZWZyZXNoRnJvbURhdGFiYXNlQWN0aW9uIiBjb21tYW5kTmFtZT0iUmVmcmVzaCBmcm9tIERhdGFiYXNlIiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5FeGVjdXRlQXNPbmVTdGF0ZW1lbnRBY3Rpb24iIGNvbW1hbmROYW1lPSJFeGVjdXRlIFNlbGVjdGVkIFRleHQgQXMgT25lIFN0YXRlbWVudCIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0NyZWF0ZUJyYW5jaCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBCcmFuY2guLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1B5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jZnQuc2VydmVyLnVpLmludGVybmFsLmFjdGlvbnMucHVzaGNvbW1hbmQiIGNvbW1hbmROYW1lPSJQdXNoIiBkZXNjcmlwdGlvbj0iUHVzaCBhcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuY29tbWFuZHMuYWRkcmVwb3NpdG9yeSIgY29tbWFuZE5hbWU9Ik5ldyBSZXBvc2l0b3J5IFByb2ZpbGUgQ29tbWFuZCIgZGVzY3JpcHRpb249IkNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IHJlcG9zaXRvcnkgcHJvZmlsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0NvcHlQYXRoIiBjb21tYW5kTmFtZT0iQ29weSBQYXRoIHRvIENsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLmVkaXRvci5wZXJmb3JtLnN0YXJ0dXAiIGNvbW1hbmROYW1lPSJQZXJmb3JtIFNldHVwIFRhc2tzIChTdGFydHVwKSIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLkphdmFQZXJzcGVjdGl2ZSIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBKYXZhU2NyaXB0IHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVWeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdSQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNob3dSdWxlckFubm90YXRpb25JbmZvcm1hdGlvbiIgY29tbWFuZE5hbWU9IlNob3cgUnVsZXIgQW5ub3RhdGlvbiBUb29sdGlwIiBkZXNjcmlwdGlvbj0iRGlzcGxheXMgYW5ub3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGNhcmV0IGxpbmUgaW4gYSBmb2N1c2VkIGhvdmVyIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdSU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5hZGQuaW1wb3J0cyIgY29tbWFuZE5hbWU9IkFkZCBJbSZhbXA7cG9ydCIgZGVzY3JpcHRpb249IkNyZWF0ZSBpbXBvcnQgZGVjbGFyYXRpb24gZm9yIHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHUml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm1vZGlmeS5tZXRob2QucGFyYW1ldGVycyIgY29tbWFuZE5hbWU9IkNoYW5nZSBGdW5jdGlvbiBTaWduYXR1cmUiIGRlc2NyaXB0aW9uPSJDaGFuZ2UgZnVuY3Rpb24gc2lnbmF0dXJlIGluY2x1ZGVzIHBhcmFtZXRlciBuYW1lcyBhbmQgcGFyYW1ldGVyIG9yZGVyIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdSeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS5lY2xpcHNlbGluay51aS51cGdyYWRlVG9FY2xpcHNlTGlua01hcHBpbmdGaWxlIiBjb21tYW5kTmFtZT0iVXBncmFkZSB0byBFY2xpcHNlTGluayBNYXBwaW5nIEZpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1NDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5icm93c2VyLm9wZW5Ccm93c2VyIiBjb21tYW5kTmFtZT0iT3BlbiBCcm93c2VyIiBkZXNjcmlwdGlvbj0iT3BlbnMgdGhlIGRlZmF1bHQgd2ViIGJyb3dzZXIuIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUdTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idXJsIiBuYW1lPSJVUkwiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHU2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJyb3dzZXJJZCIgbmFtZT0iQnJvd3NlciBJZCIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQUdTeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ibmFtZSIgbmFtZT0iQnJvd3NlciBOYW1lIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBR1RDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0b29sdGlwIiBuYW1lPSJCcm93c2VyIFRvb2x0aXAiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdUU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5jb25zdGFudCIgY29tbWFuZE5hbWU9IkV4dHJhY3QgQ29uc3RhbnQiIGRlc2NyaXB0aW9uPSJFeHRyYWN0cyBhIGNvbnN0YW50IGludG8gYSBuZXcgc3RhdGljIHZhciBhbmQgdXNlcyB0aGUgbmV3IHN0YXRpYyB2YXIiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMucmVzdWx0LnJlbW92ZUFsbEluc3RhbmNlcyIgY29tbWFuZE5hbWU9IlJlbW92ZSBBbGwgVmlzaWJsZSBSZXN1bHRzIiBjYXRlZ29yeT0iX0FIQlVOQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdUeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5pbXBsZW1lbnQub2NjdXJyZW5jZXMiIGNvbW1hbmROYW1lPSJTZWFyY2ggSW1wbGVtZW50IE9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudCBvY2N1cnJlbmNlcyBvZiBhIHNlbGVjdGVkIHR5cGUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1VDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuRGVsZXRlQnJhbmNoIiBjb21tYW5kTmFtZT0iRGVsZXRlIEJyYW5jaCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHVVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5jb250ZW50QXNzaXN0LmNvbnRleHRJbmZvcm1hdGlvbiIgY29tbWFuZE5hbWU9IkNvbnRleHQgSW5mb3JtYXRpb24iIGRlc2NyaXB0aW9uPSJTaG93IENvbnRleHQgSW5mb3JtYXRpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1VpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnNhdmVBcyIgY29tbWFuZE5hbWU9IlNhdmUgQXMiIGRlc2NyaXB0aW9uPSJTYXZlIHRoZSBjdXJyZW50IGNvbnRlbnRzIHRvIGFub3RoZXIgbG9jYXRpb24iIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1V5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVhZC5hY2Nlc3MuaW4ud29ya3NwYWNlIiBjb21tYW5kTmFtZT0iUmVhZCBBY2Nlc3MgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWFkIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHVkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5wcmV2aW91c1BlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgUGVyc3BlY3RpdmUiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdWU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnNwbGl0RWRpdG9yIiBjb21tYW5kTmFtZT0iVG9nZ2xlIFNwbGl0IEVkaXRvciIgZGVzY3JpcHRpb249IlNwbGl0IG9yIGpvaW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWRpdG9yLiIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHVml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IlNwbGl0dGVyLmlzSG9yaXpvbnRhbCIgbmFtZT0iT3JpZW50YXRpb24iIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1Z5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5jb2xsYXBzZUFsbCIgY29tbWFuZE5hbWU9IkNvbGxhcHNlIEFsbCIgZGVzY3JpcHRpb249IkNvbGxhcHNlIHRoZSBjdXJyZW50IHRyZWUiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1dDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLmNvcHlBbGxSaWdodFRvTGVmdCIgY29tbWFuZE5hbWU9IkNvcHkgQWxsIGZyb20gUmlnaHQgdG8gTGVmdCIgZGVzY3JpcHRpb249IkNvcHkgQWxsIENoYW5nZXMgZnJvbSBSaWdodCB0byBMZWZ0IiBjYXRlZ29yeT0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdXU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5kZWFjdGl2YXRlU2VsZWN0ZWRUYXNrIiBjb21tYW5kTmFtZT0iRGVhY3RpdmF0ZSBTZWxlY3RlZCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdXaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmxvY2tUb29sQmFyIiBjb21tYW5kTmFtZT0iVG9nZ2xlIExvY2sgVG9vbGJhcnMiIGRlc2NyaXB0aW9uPSJUb2dnbGUgdGhlIExvY2sgb24gdGhlIFRvb2xiYXJzIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdXeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuRGlzY29ubmVjdCIgY29tbWFuZE5hbWU9IkRpc2Nvbm5lY3QiIGRlc2NyaXB0aW9uPSJEaXNjb25uZWN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdYQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5pbnRlcmZhY2UiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEludGVyZmFjZSIgZGVzY3JpcHRpb249IkV4dHJhY3QgYSBzZXQgb2YgbWVtYmVycyBpbnRvIGEgbmV3IGludGVyZmFjZSBhbmQgdHJ5IHRvIHVzZSB0aGUgbmV3IGludGVyZmFjZSIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gud3JpdGUuYWNjZXNzLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IldyaXRlIEFjY2VzcyBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHdyaXRlIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnJlbW92ZUZyb21Xb3JraW5nU2V0IiBjb21tYW5kTmFtZT0iUmVtb3ZlIEZyb20gV29ya2luZyBTZXQiIGRlc2NyaXB0aW9uPSJSZW1vdmVzIHRoZSBzZWxlY3RlZCBvYmplY3QgZnJvbSBhIHdvcmtpbmcgc2V0LiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5jcmVhdGVBbnRCdWlsZEZpbGUiIGNvbW1hbmROYW1lPSJDcmVhdGUgQW50IEJ1aWxkIEZpbGUiIGRlc2NyaXB0aW9uPSJDcmVhdGVzIGFuIEFudCBidWlsZCBmaWxlIGZvciB0aGUgY3VycmVudCBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdZQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5vcGVuU2VsZWN0ZWRUYXNrIiBjb21tYW5kTmFtZT0iT3BlbiBTZWxlY3RlZCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdZU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5jaGFuZ2VUb1N0YXRpYyIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIENoYW5nZSB0byBzdGF0aWMgYWNjZXNzIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0NoYW5nZSB0byBzdGF0aWMgYWNjZXNzJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50LnN5YmFzZS5hc2Euc2NoZW1hb2JqZWN0ZWRpdG9yLmV4YW1wbGVzLnRhYmxlc2NoZW1hZWRpdG9yLmNvcHljb2x1bW4iIGNvbW1hbmROYW1lPSJDb3B5IiBjYXRlZ29yeT0iX0FIQlVUaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdZeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNMaW5rV2l0aFNlbGVjdGlvbiIgY29tbWFuZE5hbWU9Ikxpbmsgd2l0aCBTZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1pDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmNvbW1hbmRzLnRvZ2dsZS5mb2N1cy5hY3RpdmUudmlldyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIHRoZSBmb2N1cyBvbiBhY3RpdmUgdGFzayBmb3IgdGhlIGFjdGl2ZSB2aWV3IiBjYXRlZ29yeT0iX0FIQlVMQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdaU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLmRlbGV0ZUNvbXBsZXRlZCIgY29tbWFuZE5hbWU9IkRlbGV0ZSBDb21wbGV0ZWQgVGFza3MiIGRlc2NyaXB0aW9uPSJEZWxldGUgdGhlIHRhc2tzIG1hcmtlZCBhcyBjb21wbGV0ZWQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR1ppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLmdvVG9OZXh0VW5yZWFkIiBjb21tYW5kTmFtZT0iR28gVG8gTmV4dCBVbnJlYWQgVGFzayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHWnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuZGVidWdBY3Rpb24iIGNvbW1hbmROYW1lPSJEZWJ1ZyIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHYUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5hZGQuamF2YWRvYy5jb21tZW50IiBjb21tYW5kTmFtZT0iQWRkIEphdmFkb2MgQ29tbWVudCIgZGVzY3JpcHRpb249IkFkZCBhIEphdmFkb2MgY29tbWVudCBzdHViIHRvIHRoZSBtZW1iZXIgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHYVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNmdC5zZXJ2ZXIudWkuY2xvbmVzZXJ2ZXJjb21tYW5kIiBjb21tYW5kTmFtZT0iQ2xvbmUgU2VydmVyIiBkZXNjcmlwdGlvbj0iQ2xvbmUgU2VydmVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdhaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZWJhc2VJbnRlcmFjdGl2ZUN1cnJlbnQiIGNvbW1hbmROYW1lPSJSZWJhc2UgSW50ZXJhY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2F5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFkZENhc3QiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgY2FzdCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgY2FzdCciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2JDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cub3BlbkVkaXRvckRyb3BEb3duIiBjb21tYW5kTmFtZT0iUXVpY2sgU3dpdGNoIEVkaXRvciIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIGVkaXRvciBkcm9wIGRvd24gbGlzdCIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHYlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qYXhiLnVpLmdlbmVyYXRlSmF4YkNsYXNzZXMiIGNvbW1hbmROYW1lPSJKQVhCIENsYXNzZXMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2JpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZGVsZXRlTmV4dFdvcmQiIGNvbW1hbmROYW1lPSJEZWxldGUgTmV4dCBXb3JkIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHRoZSBuZXh0IHdvcmQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2J5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkub3BlbkRlcGVuZGVuY2llcyIgY29tbWFuZE5hbWU9Ik9wZW4gUGx1Zy1pbiBEZXBlbmRlbmNpZXMiIGRlc2NyaXB0aW9uPSJPcGVucyB0aGUgcGx1Zy1pbiBkZXBlbmRlbmNpZXMgdmlldyBmb3IgdGhlIGN1cnJlbnQgcGx1Zy1pbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHY0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS50b2dnbGVNYXJrT2NjdXJyZW5jZXMiIGNvbW1hbmROYW1lPSJUb2dnbGUgTWFyayBPY2N1cnJlbmNlcyIgZGVzY3JpcHRpb249IlRvZ2dsZXMgbWFyayBvY2N1cnJlbmNlcyBpbiBKYXZhIGVkaXRvcnMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2NTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlNraXBSZWJhc2UiIGNvbW1hbmROYW1lPSJTa2lwIGNvbW1pdCBhbmQgY29udGludWUiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEucmVwbGFjZS5pbnZvY2F0aW9ucyIgY29tbWFuZE5hbWU9IlJlcGxhY2UgSW52b2NhdGlvbnMiIGRlc2NyaXB0aW9uPSJSZXBsYWNlIGludm9jYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBtZXRob2QiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2N5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmRlY2xhcmF0aW9ucy5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJEZWNsYXJhdGlvbiBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdkQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlNldFF1aWNrZGlmZkJhc2VsaW5lIiBjb21tYW5kTmFtZT0iU2V0IHF1aWNrZGlmZiBiYXNlbGluZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudW5kbyIgY29tbWFuZE5hbWU9IlVuZG8iIGRlc2NyaXB0aW9uPSJVbmRvIHRoZSBsYXN0IG9wZXJhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUubmV3UXVpY2tNZW51IiBjb21tYW5kTmFtZT0iTmV3IG1lbnUiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBOZXcgbWVudSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uYWRkU3VwcHJlc3NXYXJuaW5ncyIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIEFkZCBAU3VwcHJlc3NXYXJuaW5ncyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgZml4IGFuZCBzZWxlY3RzICdBZGQgQFN1cHByZXNzV2FybmluZ3MnICIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmFjdGlvbnMuV2F0Y2hDb21tYW5kIiBjb21tYW5kTmFtZT0iV2F0Y2giIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSB3YXRjaCBleHByZXNzaW9uIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIEV4cHJlc3Npb25zIHZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2VTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLm9wZW5Xb3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJTd2l0Y2ggV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgd29ya3NwYWNlIHNlbGVjdGlvbiBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2VpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQucmVtb3ZlLm9jY3VycmVuY2UuYW5ub3RhdGlvbnMiIGNvbW1hbmROYW1lPSJSZW1vdmUgT2NjdXJyZW5jZSBBbm5vdGF0aW9ucyIgZGVzY3JpcHRpb249IlJlbW92ZXMgdGhlIG9jY3VycmVuY2UgYW5ub3RhdGlvbnMgZnJvbSB0aGUgY3VycmVudCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2V5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmNsb3NlQWxsIiBjb21tYW5kTmFtZT0iQ2xvc2UgQWxsIiBkZXNjcmlwdGlvbj0iQ2xvc2UgYWxsIGVkaXRvcnMiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2ZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkubmF2aWdhdGUub3Blbi50eXBlIiBjb21tYW5kTmFtZT0iT3BlbiBUeXBlIiBkZXNjcmlwdGlvbj0iT3BlbiBhIHR5cGUgaW4gYSBKYXZhIGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuY3V0IiBjb21tYW5kTmFtZT0iQ3V0IiBkZXNjcmlwdGlvbj0iQ3V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5pbnRyb2R1Y2UuaW5kaXJlY3Rpb24iIGNvbW1hbmROYW1lPSJJbnRyb2R1Y2UgSW5kaXJlY3Rpb24iIGRlc2NyaXB0aW9uPSJJbnRyb2R1Y2UgYW4gaW5kaXJlY3Rpb24gdG8gZW5jYXBzdWxhdGUgaW52b2NhdGlvbnMgb2YgYSBzZWxlY3RlZCBtZXRob2QiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2Z5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uTWVyZ2UiIGNvbW1hbmROYW1lPSJNZXJnZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZ0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3Rvci5hcHBseS5yZWZhY3RvcmluZy5zY3JpcHQiIGNvbW1hbmROYW1lPSJBcHBseSBTY3JpcHQiIGRlc2NyaXB0aW9uPSJQZXJmb3JtIHJlZmFjdG9yaW5ncyBmcm9tIGEgcmVmYWN0b3Jpbmcgc2NyaXB0IG9uIHRoZSBsb2NhbCB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2dTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUmVwbGFjZVdpdGhSZWYiIGNvbW1hbmROYW1lPSJSZXBsYWNlIHdpdGggYnJhbmNoLCB0YWcsIG9yIHJlZmVyZW5jZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZ2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuc3VibWl0VGFzayIgY29tbWFuZE5hbWU9IlN1Ym1pdCBUYXNrIiBkZXNjcmlwdGlvbj0iU3VibWl0cyB0aGUgY3VycmVudGx5IG9wZW4gdGFzayIgY2F0ZWdvcnk9Il9BSEJVUlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHZ3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkudGVzdE5nU3VpdGVTaG9ydGN1dC5jb3ZlcmFnZSIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIFRlc3RORyBTdWl0ZSIgZGVzY3JpcHRpb249IkNvdmVyYWdlIFRlc3RORyBTdWl0ZSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5leHRyYWN0LnN1cGVyY2xhc3MiIGNvbW1hbmROYW1lPSJFeHRyYWN0IFN1cGVyY2xhc3MiIGRlc2NyaXB0aW9uPSJFeHRyYWN0IGEgc2V0IG9mIG1lbWJlcnMgaW50byBhIG5ldyBzdXBlcmNsYXNzIGFuZCB0cnkgdG8gdXNlIHRoZSBuZXcgc3VwZXJjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucmVsb2FkLmRlcGVuZGVuY2llcyIgY29tbWFuZE5hbWU9IlJlbG9hZCBEZXBlbmRlbmNpZXMiIGRlc2NyaXB0aW9uPSJSZWxvYWQgRGVwZW5kZW5jaWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdoaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5nZW5lcmF0ZS54bWwiIGNvbW1hbmROYW1lPSImYW1wO1hNTCBGaWxlLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdoeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZVNob3dTZWxlY3RlZEVsZW1lbnRPbmx5IiBjb21tYW5kTmFtZT0iU2hvdyBTZWxlY3RlZCBFbGVtZW50IE9ubHkiIGRlc2NyaXB0aW9uPSJTaG93IFNlbGVjdGVkIEVsZW1lbnQgT25seSIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvcnJlY3Rpb24uYWRkSW1wb3J0IiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIGltcG9ydCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgaW1wb3J0JyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHaVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5qdW5pdFNob3J0Y3V0LnJlcnVuRmFpbGVkRmlyc3QiIGNvbW1hbmROYW1lPSJSZXJ1biBKVW5pdCBUZXN0IC0gRmFpbHVyZXMgRmlyc3QiIGRlc2NyaXB0aW9uPSJSZXJ1biBKVW5pdCBUZXN0IC0gRmFpbHVyZXMgRmlyc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2lpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmV4cG9ydCIgY29tbWFuZE5hbWU9IkV4cG9ydCIgZGVzY3JpcHRpb249IkV4cG9ydCIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFHaXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImV4cG9ydFdpemFyZElkIiBuYW1lPSJFeHBvcnQgV2l6YXJkIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHakN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkucmVmYWN0b3IubWFrZVR5cGVHbG9iYWwiIGNvbW1hbmROYW1lPSJNYWtlICZhbXA7QW5vbnltb3VzIFR5cGUgR2xvYmFsIiBkZXNjcmlwdGlvbj0iUHJvbW90ZXMgYW5vbnltb3VzIHR5cGUgdG8gZ2xvYmFsIGxldmVsIGFuZCByZXBsYWNlcyBpdHMgcmVmZXJlbmNlcyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHalN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guaW1wbGVtZW50b3JzLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJJbXBsZW1lbnRvcnMgaW4gUHJvamVjdCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgaW1wbGVtZW50b3JzIG9mIHRoZSBzZWxlY3RlZCBpbnRlcmZhY2UgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQUdqaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkFwcGx5UGF0Y2giIGNvbW1hbmROYW1lPSJBcHBseSBQYXRjaCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHanl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJKYXZhIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgSmF2YSBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVVnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHa0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5pbmRlbnQiIGNvbW1hbmROYW1lPSJDb3JyZWN0IEluZGVudGF0aW9uIiBkZXNjcmlwdGlvbj0iQ29ycmVjdHMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBzZWxlY3RlZCBsaW5lcyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHa1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5jb3B5Q29uZmlnQ29tbWFuZCIgY29tbWFuZE5hbWU9IkNvcHkgQ29uZmlndXJhdGlvbiBEYXRhIFRvIENsaXBib2FyZCIgZGVzY3JpcHRpb249IkNvcGllcyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIChzeXN0ZW0gcHJvcGVydGllcywgaW5zdGFsbGVkIGJ1bmRsZXMsIGV0YykgdG8gdGhlIGNsaXBib2FyZC4iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2tpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5mb3J3YXJkSGlzdG9yeSIgY29tbWFuZE5hbWU9IkZvcndhcmQgSGlzdG9yeSIgZGVzY3JpcHRpb249Ik1vdmUgZm9yd2FyZCBpbiB0aGUgZWRpdG9yIG5hdmlnYXRpb24gaGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFHa3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS5wZXJmb3JtVGV4dFNlYXJjaFByb2plY3QiIGNvbW1hbmROYW1lPSJGaW5kIFRleHQgaW4gUHJvamVjdCIgZGVzY3JpcHRpb249IlNlYXJjaGVzIHRoZSBmaWxlcyBpbiB0aGUgcHJvamVjdCBmb3Igc3BlY2lmaWMgdGV4dC4iIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBR2xDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LnJlYnVpbGRBbGwiIGNvbW1hbmROYW1lPSJSZWJ1aWxkIEFsbCIgZGVzY3JpcHRpb249IlJlYnVpbGQgYWxsIHByb2plY3RzIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNnQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZ2VmLnpvb21faW4iIGNvbW1hbmROYW1lPSJab29tIEluIiBkZXNjcmlwdGlvbj0iWm9vbSBJbiIgY2F0ZWdvcnk9Il9BSEJVV1N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzZ1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5xdWljay5mb3JtYXQiIGNvbW1hbmROYW1lPSJGb3JtYXQgRWxlbWVudCIgZGVzY3JpcHRpb249IkZvcm1hdCBlbmNsb3NpbmcgdGV4dCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNnaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0Lm9wZW5Mb2NhbEZpbGUiIGNvbW1hbmROYW1lPSJPcGVuIEZpbGUuLi4iIGRlc2NyaXB0aW9uPSJPcGVuIGEgZmlsZSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzZ3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5EaXNjb25uZWN0IiBjb21tYW5kTmFtZT0iRGlzY29ubmVjdCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWxlY3QucHJldmlvdXMiIGNvbW1hbmROYW1lPSJTZWxlY3QgUHJldmlvdXMgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBwcmV2aW91cyBzaWJsaW5nIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNoU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmV4dGVybmFsaXplU3RyaW5ncyIgY29tbWFuZE5hbWU9IkV4dGVybmFsaXplIFN0cmluZ3MgaW4gUGx1Zy1pbnMiIGRlc2NyaXB0aW9uPSJFeHRyYWN0IHRyYW5zbGF0YWJsZSBzdHJpbmdzIGZyb20gcGx1Zy1pbiBmaWxlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUucmVmcmVzaCIgY29tbWFuZE5hbWU9IlJlZnJlc2giIGRlc2NyaXB0aW9uPSJSZWZyZXNoIHRoZSBzZWxlY3RlZCBpdGVtcyIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuY29tbWFuZHMuc2hvd2NhdGVnb3J5IiBjb21tYW5kTmFtZT0iU2hvdyBDYXRlZ29yeSIgZGVzY3JpcHRpb249IlNob3cgQ2F0ZWdvcnkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2lDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDaGFuZ2VDcmVkZW50aWFscyIgY29tbWFuZE5hbWU9IkNoYW5nZSBDcmVkZW50aWFscyIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmV4dHJhY3RNZXRob2RJbnBsYWNlLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIEV4dHJhY3QgbWV0aG9kIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0V4dHJhY3QgdG8gbWV0aG9kJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzaWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnAyLnVpLlNlYXJjaFJlcG9zaXRvcmllcyIgY29tbWFuZE5hbWU9IlNlYXJjaCBSZXBvc2l0b3JpZXMiIGNhdGVnb3J5PSJfQUhCVU9DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2l5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuY2xvc2VBbGxQZXJzcGVjdGl2ZXMiIGNvbW1hbmROYW1lPSJDbG9zZSBBbGwgUGVyc3BlY3RpdmVzIiBkZXNjcmlwdGlvbj0iQ2xvc2UgYWxsIG9wZW4gcGVyc3BlY3RpdmVzIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNqQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hZGRUaHJvd3NEZWNsIiBjb21tYW5kTmFtZT0iUXVpY2sgRml4IC0gQWRkIHRocm93cyBkZWNsYXJhdGlvbiIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgdGhyb3dzIGRlY2xhcmF0aW9uJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzalN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuZGlzY29ubmVjdGVkIiBjb21tYW5kTmFtZT0iRGlzY29ubmVjdGVkIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNqaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC5saW5lU3RhcnQiIGNvbW1hbmROYW1lPSJTZWxlY3QgTGluZSBTdGFydCIgZGVzY3JpcHRpb249IlNlbGVjdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2p5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5SZXdvcmQiIGNvbW1hbmROYW1lPSJSZXdvcmQgQ29tbWl0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNrQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEudG9nZ2xlTWFya09jY3VycmVuY2VzIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE1hcmsgT2NjdXJyZW5jZXMiIGRlc2NyaXB0aW9uPSJUb2dnbGVzIG1hcmsgb2NjdXJyZW5jZXMgaW4gSmF2YVNjcmlwdCBlZGl0b3JzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNrU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy5saW5lTnVtYmVyVG9nZ2xlIiBjb21tYW5kTmFtZT0iU2hvdyBMaW5lIE51bWJlcnMiIGRlc2NyaXB0aW9uPSJUb2dnbGUgZGlzcGxheSBvZiBsaW5lIG51bWJlcnMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2tpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5pbmZlci50eXBlLmFyZ3VtZW50cyIgY29tbWFuZE5hbWU9IkluZmVyIEdlbmVyaWMgVHlwZSBBcmd1bWVudHMiIGRlc2NyaXB0aW9uPSJJbmZlciB0eXBlIGFyZ3VtZW50cyBmb3IgcmVmZXJlbmNlcyB0byBnZW5lcmljIGNsYXNzZXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cyIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFza3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkucGVyc2lzdGVudEF0dHJpYnV0ZU1hcEFzIiBjb21tYW5kTmFtZT0iTWFwIEFzIiBjYXRlZ29yeT0iX0FIQlVQQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXNsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ic3BlY2lmaWVkUGVyc2lzdGVudEF0dHJpYnV0ZU1hcHBpbmdLZXkiIG5hbWU9InNwZWNpZmllZCBtYXBwaW5nIGtleSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBc2xTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJkZWZhdWx0UGVyc2lzdGVudEF0dHJpYnV0ZU1hcHBpbmdLZXkiIG5hbWU9ImRlZmF1bHQgbWFwcGluZyBrZXkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc2xpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy5pbmRleC51aS5jb21tYW5kLlJlc2V0SW5kZXgiIGNvbW1hbmROYW1lPSJSZWZyZXNoIFNlYXJjaCBJbmRleCIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVG9nZ2xlQnJhbmNoQ29tbWl0IiBjb21tYW5kTmFtZT0iVG9nZ2xlIExhdGVzdCBCcmFuY2ggQ29tbWl0IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNtQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwucGFzdGUiIGNvbW1hbmROYW1lPSJQYXN0ZSIgY2F0ZWdvcnk9Il9BSEJVVXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5QdXNoQ29tbWl0IiBjb21tYW5kTmFtZT0iUHVzaCBDb21taXQuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc21peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFzc2lnblRvRmllbGQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIHRvIHZhciIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBc3NpZ24gdG8gdmFyJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuY29udmVydEphdmFHZW5lcmF0b3JzIiBjb21tYW5kTmFtZT0iTW92ZSBKYXZhIEdlbmVyYXRvcnMgdG8gWE1MLi4uIiBjYXRlZ29yeT0iX0FIQlVPaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNuQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLnNob3dJblN5c3RlbUV4cGxvcmVyIiBjb21tYW5kTmFtZT0iU2hvdyBJbiAoU3lzdGVtIEV4cGxvcmVyKSIgZGVzY3JpcHRpb249IlNob3cgaW4gc3lzdGVtJ3MgZXhwbG9yZXIgKGZpbGUgbWFuYWdlcikiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBc25TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuc2hvd0luU3lzdGVtRXhwbG9yZXIucGF0aCIgbmFtZT0iUmVzb3VyY2UgU3lzdGVtIFBhdGggUGFyYW1ldGVyIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQubmV3LmxvY2FsLnRhc2siIGNvbW1hbmROYW1lPSJOZXcgTG9jYWwgVGFzayIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzbnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QubGluZURvd24iIGNvbW1hbmROYW1lPSJTZWxlY3QgTGluZSBEb3duIiBkZXNjcmlwdGlvbj0iRXh0ZW5kIHRoZSBzZWxlY3Rpb24gdG8gdGhlIG5leHQgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNvQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNvcnQubWVtYmVycyIgY29tbWFuZE5hbWU9IlNvcnQgTWVtYmVycyIgZGVzY3JpcHRpb249IlNvcnQgYWxsIG1lbWJlcnMgdXNpbmcgdGhlIG1lbWJlciBvcmRlciBwcmVmZXJlbmNlIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNvU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0Lmxvd2VyQ2FzZSIgY29tbWFuZE5hbWU9IlRvIExvd2VyIENhc2UiIGRlc2NyaXB0aW9uPSJDaGFuZ2VzIHRoZSBzZWxlY3Rpb24gdG8gbG93ZXIgY2FzZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzb2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuY29tbWFuZHMuYWRkcHJvZmlsZSIgY29tbWFuZE5hbWU9Ik5ldyBDb25uZWN0aW9uIFByb2ZpbGUgQ29tbWFuZCIgZGVzY3JpcHRpb249IkNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gcHJvZmlsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzb3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkudWkuaWdub3JlQ2F0ZWdvcnkiIG5hbWU9Imlnbm9yZUNhdGVnb3J5Ii8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBc3BDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnVpLnVzZVNlbGVjdGlvbiIgbmFtZT0idXNlU2VsZWN0aW9uIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5Db21wYXJlV2l0aEluZGV4IiBjb21tYW5kTmFtZT0iQ29tcGFyZSB3aXRoIEluZGV4IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNwaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmRpc2NvdmVyeS51aSIgY29tbWFuZE5hbWU9Im0yZSBNYXJrZXRwbGFjZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC56b29tT3V0IiBjb21tYW5kTmFtZT0iWm9vbSBPdXQiIGRlc2NyaXB0aW9uPSJab29tIG91dCB0ZXh0LCBkZWNyZWFzZSBkZWZhdWx0IGZvbnQgc2l6ZSBmb3IgdGV4dCBlZGl0b3JzIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNxQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5tYXJrVGFza0luY29tcGxldGUiIGNvbW1hbmROYW1lPSJNYXJrIFRhc2sgSW5jb21wbGV0ZSIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUuc2F2ZSIgY29tbWFuZE5hbWU9IlNhdmUiIGRlc2NyaXB0aW9uPSJTYXZlIHRoZSBjdXJyZW50IGNvbnRlbnRzIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNxaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uYXNzaWduQWxsUGFyYW1zVG9OZXdGaWVsZHMuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIGFsbCBwYXJhbWV0ZXJzIHRvIG5ldyBmaWVsZHMiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQXNzaWduIGFsbCBwYXJhbWV0ZXJzIHRvIG5ldyBmaWVsZHMnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWZlcmVuY2VzLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJSZWZlcmVuY2VzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuaW50cm9kdWNlLmluZGlyZWN0aW9uIiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIEluZGlyZWN0aW9uIiBkZXNjcmlwdGlvbj0iSW50cm9kdWNlIGFuIGluZGlyZWN0aW9uIHRvIGVuY2Fwc3VsYXRlIGludm9jYXRpb25zIG9mIGEgc2VsZWN0ZWQgZnVuY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3JTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gub2NjdXJyZW5jZXMuaW4uZmlsZSIgY29tbWFuZE5hbWU9IlNlYXJjaCBBbGwgT2NjdXJyZW5jZXMgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGl0cyBkZWNsYXJpbmcgZmlsZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzcml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnNwZWNpZmljX2NvbnRlbnRfYXNzaXN0LmNvbW1hbmQiIGNvbW1hbmROYW1lPSJDb250ZW50IEFzc2lzdCIgZGVzY3JpcHRpb249IkEgcGFyYW1ldGVyaXphYmxlIGNvbW1hbmQgdGhhdCBpbnZva2VzIGNvbnRlbnQgYXNzaXN0IHdpdGggYSBzaW5nbGUgY29tcGxldGlvbiBwcm9wb3NhbCBjYXRlZ29yeSIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzcnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnNwZWNpZmljX2NvbnRlbnRfYXNzaXN0LmNhdGVnb3J5X2lkIiBuYW1lPSJ0eXBlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5tYXJrVGFza1JlYWRHb1RvTmV4dFVucmVhZCIgY29tbWFuZE5hbWU9Ik1hcmsgVGFzayBSZWFkIGFuZCBHbyBUbyBOZXh0IFVucmVhZCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXNzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGVhbS51aS5hcHBseVBhdGNoIiBjb21tYW5kTmFtZT0iQXBwbHkgUGF0Y2guLi4iIGRlc2NyaXB0aW9uPSJBcHBseSBhIHBhdGNoIHRvIG9uZSBvciBtb3JlIHdvcmtzcGFjZSBwcm9qZWN0cy4iIGNhdGVnb3J5PSJfQUhCVVFpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3NpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29tbWFuZHMucnVuZGVmYXVsdHRhc2tzIiBjb21tYW5kTmFtZT0iUnVuIEdyYWRsZSBEZWZhdWx0IFRhc2tzIiBkZXNjcmlwdGlvbj0iUnVucyB0aGUgZGVmYXVsdCB0YXNrcyBvZiB0aGUgc2VsZWN0ZWQgR3JhZGxlIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3N5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmdlbmVyYXRlRW50aXRpZXMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBFbnRpdGllcyBmcm9tIFRhYmxlcy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QubGluZUVuZCIgY29tbWFuZE5hbWU9IlNlbGVjdCBMaW5lIEVuZCIgZGVzY3JpcHRpb249IlNlbGVjdCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3RTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnJlbW92ZUFjdGl2ZVNlc3Npb24iIGNvbW1hbmROYW1lPSJSZW1vdmUgQWN0aXZlIFNlc3Npb24iIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3RpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm1hcmtUYXNrUmVhZCIgY29tbWFuZE5hbWU9Ik1hcmsgVGFzayBSZWFkIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN0eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm1vdmUuZWxlbWVudCIgY29tbWFuZE5hbWU9Ik1vdmUgLSBSZWZhY3RvcmluZyAiIGRlc2NyaXB0aW9uPSJNb3ZlIHRoZSBzZWxlY3RlZCBlbGVtZW50IHRvIGEgbmV3IGxvY2F0aW9uIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC53b3JkUHJldmlvdXMiIGNvbW1hbmROYW1lPSJTZWxlY3QgUHJldmlvdXMgV29yZCIgZGVzY3JpcHRpb249IlNlbGVjdCB0aGUgcHJldmlvdXMgd29yZCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmluZGVudCIgY29tbWFuZE5hbWU9IkluZGVudCBMaW5lIiBkZXNjcmlwdGlvbj0iSW5kZW50cyB0aGUgY3VycmVudCBsaW5lIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEucXVpY2suZm9ybWF0IiBjb21tYW5kTmFtZT0iRm9ybWF0IEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJGb3JtYXQgZW5jbG9zaW5nIHRleHQgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5wYWdlZGVzaWduZXIudmVydGljYWwiIGNvbW1hbmROYW1lPSJWZXJ0aWNhbCBMYXlvdXQiIGNhdGVnb3J5PSJfQUhCVVJDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3ZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5TdGVwT3ZlciIgY29tbWFuZE5hbWU9IlN0ZXAgT3ZlciIgZGVzY3JpcHRpb249IlN0ZXAgb3ZlciIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuYWRkVG9QZXJzaXN0ZW5jZVVuaXQiIGNvbW1hbmROYW1lPSJBZGQgdG8gUGVyc2lzdGVuY2UgVW5pdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNvbXBhcmUuc2VsZWN0UHJldmlvdXNDaGFuZ2UiIGNvbW1hbmROYW1lPSJTZWxlY3QgUHJldmlvdXMgQ2hhbmdlIiBkZXNjcmlwdGlvbj0iU2VsZWN0IFByZXZpb3VzIENoYW5nZSIgY2F0ZWdvcnk9Il9BSEJVVEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzdnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUuZXhpdCIgY29tbWFuZE5hbWU9IkV4aXQiIGRlc2NyaXB0aW9uPSJFeGl0IHRoZSBhcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzd0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im1heVByb21wdCIgbmFtZT0ibWF5IHByb21wdCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3dTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tcGFyZVdpdGhIZWFkIiBjb21tYW5kTmFtZT0iQ29tcGFyZSB3aXRoIEhFQUQgUmV2aXNpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3dpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tcGFyZVdpdGhDb21taXQiIGNvbW1hbmROYW1lPSJDb21wYXJlIHdpdGggQ29tbWl0Li4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3T3BlbiIgY29tbWFuZE5hbWU9Ik9wZW4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3hDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLmRlYWN0aXZhdGVBbGxUYXNrcyIgY29tbWFuZE5hbWU9IkRlYWN0aXZhdGUgVGFzayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzeFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5TaG93SGlzdG9yeSIgY29tbWFuZE5hbWU9IlNob3cgaW4gSGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzeGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnN1cnJvdW5kLndpdGgucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU3Vycm91bmQgV2l0aCBRdWljayBNZW51IiBkZXNjcmlwdGlvbj0iU2hvd3MgdGhlIFN1cnJvdW5kIFdpdGggcXVpY2sgbWVudSIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzeHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmNvbW1hbmQudXBkYXRlUHJvamVjdCIgY29tbWFuZE5hbWU9IlVwZGF0ZSBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iVXBkYXRlIE1hdmVuIFByb2plY3QgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN5Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG9vbHMubGF5b3V0LnNweS5jb21tYW5kcy5sYXlvdXRTcHlDb21tYW5kIiBjb21tYW5kTmFtZT0iTGF5b3V0IFNweSIgZGVzY3JpcHRpb249IlNob3cgdGhlIExheW91dCBTcHkiIGNhdGVnb3J5PSJfQUhCVVd5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3lTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uU2ltcGxlUHVzaCIgY29tbWFuZE5hbWU9IlB1c2ggdG8gVXBzdHJlYW0iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3lpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJyZWZyZXNoLnNjaGVtYS5lZGl0b3IuYWN0aW9uLmlkIiBjb21tYW5kTmFtZT0iUmVmcmVzaCBmcm9tIFNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzeXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLmFkZE1lbW9yeU1vbml0b3IiIGNvbW1hbmROYW1lPSJBZGQgTWVtb3J5IEJsb2NrIiBkZXNjcmlwdGlvbj0iQWRkIG1lbW9yeSBibG9jayIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzekN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5vcmdhbml6ZU1hbmlmZXN0IiBjb21tYW5kTmFtZT0iT3JnYW5pemUgTWFuaWZlc3RzIiBkZXNjcmlwdGlvbj0iQ2xlYW5zIHVwIHBsdWctaW4gbWFuaWZlc3QgZmlsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc3pTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5uYXZpZ2F0ZS5nb3RvdHlwZSIgY29tbWFuZE5hbWU9IkdvIHRvIFR5cGUiIGRlc2NyaXB0aW9uPSJHbyB0byBUeXBlIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXN6aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0Lmp1bml0U2hvcnRjdXQucnVuIiBjb21tYW5kTmFtZT0iUnVuIEpVbml0IFRlc3QiIGRlc2NyaXB0aW9uPSJSdW4gSlVuaXQgVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzenl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuY29udmVydEphdmFRdWVyaWVzIiBjb21tYW5kTmFtZT0iTW92ZSBKYXZhIFF1ZXJpZXMgdG8gWE1MLi4uIiBjYXRlZ29yeT0iX0FIQlVPaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5QdXNoSGVhZFRvR2Vycml0IiBjb21tYW5kTmFtZT0iUHVzaCBDdXJyZW50IEhlYWQgdG8gR2Vycml0IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5zZWxlY3RBbGwiIGNvbW1hbmROYW1lPSJTZWxlY3QgQWxsIiBkZXNjcmlwdGlvbj0iU2VsZWN0IGFsbCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuc3d0Qm90SnVuaXRTaG9ydGN1dC5jb3ZlcmFnZSIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIFNXVEJvdCBUZXN0IiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UgU1dUQm90IFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2hvdy5vdXRsaW5lIiBjb21tYW5kTmFtZT0iUXVpY2sgT3V0bGluZSIgZGVzY3JpcHRpb249IlNob3cgdGhlIHF1aWNrIG91dGxpbmUgZm9yIHRoZSBlZGl0b3IgaW5wdXQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnJlZmFjdG9yLm1vdmUiIGNvbW1hbmROYW1lPSJNb3ZlIiBkZXNjcmlwdGlvbj0iTW92ZSBhIEphdmEgRWxlbWVudCB0byBhbm90aGVyIHBhY2thZ2UiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZ290by5uZXh0Lm1lbWJlciIgY29tbWFuZE5hbWU9IkdvIHRvIE5leHQgTWVtYmVyIiBkZXNjcmlwdGlvbj0iTW92ZSB0aGUgY2FyZXQgdG8gdGhlIG5leHQgbWVtYmVyIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMxaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5yZWJ1aWxkUHJvamVjdCIgY29tbWFuZE5hbWU9IlJlYnVpbGQgUHJvamVjdCIgZGVzY3JpcHRpb249IlJlYnVpbGQgdGhlIHNlbGVjdGVkIHByb2plY3RzIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmVuYWJsZW1lbnQuc3liYXNlLmFzYS5zY2hlbWFvYmplY3RlZGl0b3IuZXhhbXBsZXMudGFibGVzY2hlbWFlZGl0b3IucGFzdGVjb2x1bW4iIGNvbW1hbmROYW1lPSJQYXN0ZSIgY2F0ZWdvcnk9Il9BSEJVVGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbUZpbGVBY3Rpb24ucnVuIiBjb21tYW5kTmFtZT0iUnVuIE1hdmVuIEJ1aWxkIiBkZXNjcmlwdGlvbj0iUnVuIE1hdmVuIEJ1aWxkIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5saW5rV2l0aFNlbGVjdGlvbiIgY29tbWFuZE5hbWU9Ikxpbmsgd2l0aCBDdXJyZW50IFNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5hY3Rpb25zLkxpZmVDeWNsZUluc3RhbGwucnVuIiBjb21tYW5kTmFtZT0iUnVuIE1hdmVuIEluc3RhbGwiIGRlc2NyaXB0aW9uPSJSdW4gTWF2ZW4gSW5zdGFsbCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzMnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuRXhlY3V0ZUN1cnJlbnRBY3Rpb24iIGNvbW1hbmROYW1lPSJFeGVjdXRlIEN1cnJlbnQgVGV4dCIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzM0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5jb3B5TGluZURvd24iIGNvbW1hbmROYW1lPSJDb3B5IExpbmVzIiBkZXNjcmlwdGlvbj0iRHVwbGljYXRlcyB0aGUgc2VsZWN0ZWQgbGluZXMgYW5kIG1vdmVzIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGNvcHkiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5lZGl0b3IucGVyZm9ybSIgY29tbWFuZE5hbWU9IlBlcmZvcm0gU2V0dXAgVGFza3MiIGNhdGVnb3J5PSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLmluc3RhbGxhdGlvbkRpYWxvZyIgY29tbWFuZE5hbWU9Ikluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIGluc3RhbGxhdGlvbiBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5yZWZhY3Rvci5jcmVhdGUucmVmYWN0b3Jpbmcuc2NyaXB0IiBjb21tYW5kTmFtZT0iQ3JlYXRlIFNjcmlwdCIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIHJlZmFjdG9yaW5nIHNjcmlwdCBmcm9tIHJlZmFjdG9yaW5ncyBvbiB0aGUgbG9jYWwgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi50eXBlLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9Ik9wZW4gVHlwZSBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJPcGVuIGEgdHlwZSBoaWVyYXJjaHkgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ub2dnbGVTdGVwRmlsdGVycyIgY29tbWFuZE5hbWU9IlVzZSBTdGVwIEZpbHRlcnMiIGRlc2NyaXB0aW9uPSJUb2dnbGVzIGVuYWJsZW1lbnQgb2YgZGVidWcgc3RlcCBmaWx0ZXJzIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ubGluZVVwIiBjb21tYW5kTmFtZT0iTGluZSBVcCIgZGVzY3JpcHRpb249IkdvIHVwIG9uZSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by53aW5kb3dTdGFydCIgY29tbWFuZE5hbWU9IldpbmRvdyBTdGFydCIgZGVzY3JpcHRpb249IkdvIHRvIHRoZSBzdGFydCBvZiB0aGUgd2luZG93IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS51cGRhdGVwYXNzd29yZGNvbW1hbmQiIGNvbW1hbmROYW1lPSJVcGRhdGUgUGFzc3dvcmQuLi4iIGRlc2NyaXB0aW9uPSJVcGRhdGUgUGFzc3dvcmQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hZGRCbG9jay5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBSZXBsYWNlIHN0YXRlbWVudCB3aXRoIGJsb2NrIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1JlcGxhY2Ugc3RhdGVtZW50IHdpdGggYmxvY2snIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29tbW9ucy51aS5jb21tYW5kLkFkZFJlcG9zaXRvcnkiIGNvbW1hbmROYW1lPSJBZGQgUmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVUFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWxlY3QuZW5jbG9zaW5nIiBjb21tYW5kTmFtZT0iU2VsZWN0IEVuY2xvc2luZyBFbGVtZW50IiBkZXNjcmlwdGlvbj0iRXhwYW5kIHNlbGVjdGlvbiB0byBpbmNsdWRlIGVuY2xvc2luZyBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYW50LnVpLmFudFNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgQW50IEJ1aWxkIiBkZXNjcmlwdGlvbj0iRGVidWcgQW50IEJ1aWxkIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5hZGROb25OTFMiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgbm9uLU5MUyB0YWciIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnQWRkIG5vbi1OTFMgdGFnJyIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzNml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5Bc3N1bWVVbmNoYW5nZWQiIGNvbW1hbmROYW1lPSJBc3N1bWUgVW5jaGFuZ2VkIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmNsb3NlUGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJDbG9zZSBQZXJzcGVjdGl2ZSIgZGVzY3JpcHRpb249IkNsb3NlIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXM3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmNsb3NlUGVyc3BlY3RpdmUucGVyc3BlY3RpdmVJZCIgbmFtZT0iUGVyc3BlY3RpdmUgSWQiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuYWRkLmJsb2NrLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJBZGQgQmxvY2sgQ29tbWVudCIgZGVzY3JpcHRpb249IkVuY2xvc2UgdGhlIHNlbGVjdGlvbiB3aXRoIGEgYmxvY2sgY29tbWVudCIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzN2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkubmV4dFNpYmxpbmciIGNvbW1hbmROYW1lPSJOZXh0IFNpYmxpbmciIGRlc2NyaXB0aW9uPSJHbyB0byBOZXh0IFNpYmxpbmciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBczd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5leHRyYWN0LmxvY2FsLnZhcmlhYmxlIiBjb21tYW5kTmFtZT0iRXh0cmFjdCBMb2NhbCBWYXJpYWJsZSIgZGVzY3JpcHRpb249IkV4dHJhY3RzIGFuIGV4cHJlc3Npb24gaW50byBhIG5ldyBsb2NhbCB2YXJpYWJsZSBhbmQgdXNlcyB0aGUgbmV3IGxvY2FsIHZhcmlhYmxlIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkubmF2aWdhdGUub3Blbi50eXBlIiBjb21tYW5kTmFtZT0iT3BlbiBUeXBlIiBkZXNjcmlwdGlvbj0iT3BlbiBhIHR5cGUgaW4gYSBKYXZhU2NyaXB0IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzOFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLm9wZW5DaGVhdFNoZWV0VVJMIiBjb21tYW5kTmFtZT0iT3BlbiBDaGVhdCBTaGVldCBmcm9tIFVSTCIgZGVzY3JpcHRpb249Ik9wZW4gYSBDaGVhdCBTaGVldCBmcm9tIGZpbGUgYXQgYSBzcGVjaWZpZWQgVVJMLiIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzOGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImNoZWF0U2hlZXRJZCIgbmFtZT0iSWRlbnRpZmllciIgb3B0aW9uYWw9ImZhbHNlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBczh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJuYW1lIiBuYW1lPSJOYW1lIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEFzOUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InVybCIgbmFtZT0iVVJMIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0icmV2ZXJ0LnNjaGVtYS5lZGl0b3IuYWN0aW9uLmlkIiBjb21tYW5kTmFtZT0iUmV2ZXJ0IE9iamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzOWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkubGF1bmNoc2hvcnRjdXQuZGVidWciIGNvbW1hbmROYW1lPSJEZWJ1ZyBYU0xUIFRyYW5zZm9ybWF0aW9uIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgY29uZmlndXJhdGlvbiB0byBkZWJ1ZyBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXM5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlB1c2hCcmFuY2giIGNvbW1hbmROYW1lPSJQdXNoIEJyYW5jaC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzLUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmNvbW1hbmQuYWRkRGVwZW5kZW5jeSIgY29tbWFuZE5hbWU9IkFkZCBNYXZlbiBEZXBlbmRlbmN5IiBkZXNjcmlwdGlvbj0iQWRkIE1hdmVuIERlcGVuZGVuY3kiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBcy1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuRXhlY3V0ZSIgY29tbWFuZE5hbWU9IkV4ZWN1dGUiIGRlc2NyaXB0aW9uPSJFdmFsdWF0ZSBzZWxlY3RlZCB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXMtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmFkZC5ibG9jay5jb21tZW50IiBjb21tYW5kTmFtZT0iQWRkIEJsb2NrIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJFbmNsb3NlIHRoZSBzZWxlY3Rpb24gd2l0aCBhIGJsb2NrIGNvbW1lbnQiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBcy15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLmNvcmUuc3luY2hyb25pemVDbGFzc2VzIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUgQ2xhc3MgTGlzdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzX0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmJyZWFrcG9pbnQucHJvcGVydGllcyIgY29tbWFuZE5hbWU9IkJyZWFrcG9pbnQgUHJvcGVydGllcy4uLiIgZGVzY3JpcHRpb249Ik1vZGlmeSBicmVha3BvaW50IHByb3BlcnRpZXMiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc19TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5uYXZpZ2F0ZS5nb3RvcGFja2FnZSIgY29tbWFuZE5hbWU9IkdvIHRvIEZvbGRlciIgZGVzY3JpcHRpb249IkdvIHRvIEZvbGRlciIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEFzX2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVhZC5hY2Nlc3MuaW4ucHJvamVjdCIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlYWQgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgZW5jbG9zaW5nIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBc195eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLmNsb3NlQWxsU2F2ZWQiIGNvbW1hbmROYW1lPSJDbG9zZSBBbGwgU2F2ZWQiIGRlc2NyaXB0aW9uPSJDbG9zZSBhbGwgc2F2ZWQgZWRpdG9ycyIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0QUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIubGF1bmNoU2hvcnRjdXQucnVuIiBjb21tYW5kTmFtZT0iUnVuIG9uIFNlcnZlciIgZGVzY3JpcHRpb249IlJ1biB0aGUgY3VycmVudCBzZWxlY3Rpb24gb24gYSBzZXJ2ZXIiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5tb3ZlLmlubmVyLnRvLnRvcC5sZXZlbCIgY29tbWFuZE5hbWU9IkNvbnZlcnQgTWVtYmVyIFR5cGUgdG8gVG9wIExldmVsIiBkZXNjcmlwdGlvbj0iQ29udmVydCBtZW1iZXIgdHlwZSB0byB0b3AgbGV2ZWwiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnJlZG8iIGNvbW1hbmROYW1lPSJSZWRvIiBkZXNjcmlwdGlvbj0iUmVkbyB0aGUgbGFzdCBvcGVyYXRpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLmxhdW5jaFNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgb24gU2VydmVyIiBkZXNjcmlwdGlvbj0iRGVidWcgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9uIGEgc2VydmVyIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLmVkaXRvci5SZW5hbWVBcnRpZmFjdEFjdGlvbiIgY29tbWFuZE5hbWU9IlJlbmFtZSBNYXZlbiBBcnRpZmFjdC4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0QlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnNlbGVjdFdvcmtpbmdTZXRzIiBjb21tYW5kTmFtZT0iU2VsZWN0IFdvcmtpbmcgU2V0cyIgZGVzY3JpcHRpb249IlNlbGVjdCB0aGUgd29ya2luZyBzZXRzIHRoYXQgYXJlIGFwcGxpY2FibGUgZm9yIHRoaXMgd2luZG93LiIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Qml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuRXhlY3V0ZVNRTEFjdGlvbiIgY29tbWFuZE5hbWU9IkV4ZWN1dGUgQWxsIiBjYXRlZ29yeT0iX0FIQlVWaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRCeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnJlbmFtZS5lbGVtZW50IiBjb21tYW5kTmFtZT0iUmVuYW1lIC0gUmVmYWN0b3JpbmcgIiBkZXNjcmlwdGlvbj0iUmVuYW1lIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRDQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLmFwaS50b29scy51aS5yZW1vdmUuZmlsdGVycyIgY29tbWFuZE5hbWU9IlJlbW92ZSAmYW1wO0FQSSBQcm9ibGVtIEZpbHRlcnMuLi4iIGRlc2NyaXB0aW9uPSJSZW1vdmUgQVBJIHByb2JsZW0gZmlsdGVycyBmb3IgdGhpcyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRDU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5jb21tYW5kLm5ld3ZpZXciIGNvbW1hbmROYW1lPSJOZXcgVGVybWluYWwgVmlldyIgY2F0ZWdvcnk9Il9BSEJVU3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Q2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5leHRlcm5hbGl6ZS5zdHJpbmdzIiBjb21tYW5kTmFtZT0iRXh0ZXJuYWxpemUgU3RyaW5ncyIgZGVzY3JpcHRpb249IkZpbmRzIGFsbCBzdHJpbmdzIHRoYXQgYXJlIG5vdCBleHRlcm5hbGl6ZWQgYW5kIG1vdmVzIHRoZW0gaW50byBhIHNlcGFyYXRlIHByb3BlcnR5IGZpbGUiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmV4dHJhY3RDb25zdGFudC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBFeHRyYWN0IGNvbnN0YW50IiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0V4dHJhY3QgY29uc3RhbnQnIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXREQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNoZXJyeVBpY2siIGNvbW1hbmROYW1lPSJDaGVycnkgUGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUuY2xvc2UiIGNvbW1hbmROYW1lPSJDbG9zZSIgZGVzY3JpcHRpb249IkNsb3NlIHRoZSBhY3RpdmUgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXREaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnN1cnJvdW5kLndpdGgudHJ5LmNhdGNoIiBjb21tYW5kTmFtZT0iU3Vycm91bmQgd2l0aCB0cnkvY2F0Y2ggQmxvY2siIGRlc2NyaXB0aW9uPSJTdXJyb3VuZCB0aGUgc2VsZWN0ZWQgdGV4dCB3aXRoIGEgdHJ5L2NhdGNoIGJsb2NrIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXREeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmdvdG8ucHJldmlvdXMubWVtYmVyIiBjb21tYW5kTmFtZT0iR28gdG8gUHJldmlvdXMgTWVtYmVyIiBkZXNjcmlwdGlvbj0iTW92ZSB0aGUgY2FyZXQgdG8gdGhlIHByZXZpb3VzIG1lbWJlciBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5SZXNldCIgY29tbWFuZE5hbWU9IlJlc2V0Li4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRFU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlJlc2V0TW9kZSIgbmFtZT0iUmVzZXQgbW9kZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnByZXZpb3VzU3ViVGFiIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgU3ViLVRhYiIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgcHJldmlvdXMgc3ViLXRhYiIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5nZW5lcmF0ZS5oYXNoY29kZS5lcXVhbHMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBoYXNoQ29kZSgpIGFuZCBlcXVhbHMoKSIgZGVzY3JpcHRpb249IkdlbmVyYXRlcyBoYXNoQ29kZSgpIGFuZCBlcXVhbHMoKSBtZXRob2RzIGZvciB0aGUgdHlwZSIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0RkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmpzLmd1bHAuY29tbWFuZHMuZ3VscExhdW5jaCIgY29tbWFuZE5hbWU9IlJ1biBhcyBHdWxwIFRhc2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5zaG93SW4iIGNvbW1hbmROYW1lPSJTaG93IEluIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRGaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuc2hvd0luLnRhcmdldElkIiBuYW1lPSJTaG93IEluIFRhcmdldCBJZCIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Rnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InNlZC50YWJsZXRyZWUuY29sbGFwc2VBbGwiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSBBbGwiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdSZW1vdmVSZW1vdGUiIGNvbW1hbmROYW1lPSJEZWxldGUgUmVtb3RlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRHU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZGlhbG9ncy5vcGVuSW5wdXREaWFsb2ciIGNvbW1hbmROYW1lPSJPcGVuIElucHV0IERpYWxvZyIgZGVzY3JpcHRpb249Ik9wZW4gYW4gSW5wdXQgRGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVOeXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXRHaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idGl0bGUiIG5hbWU9IlRpdGxlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdEd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJtZXNzYWdlIiBuYW1lPSJNZXNzYWdlIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdEhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJpbml0aWFsVmFsdWUiIG5hbWU9IkluaXRpYWwgVmFsdWUiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0SFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImNhbmNlbFJldHVybnMiIG5hbWU9IlJldHVybiBWYWx1ZSBvbiBDYW5jZWwiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRIaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZWJhc2VDdXJyZW50IiBjb21tYW5kTmFtZT0iUmViYXNlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRIeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmFkZC51bmltcGxlbWVudGVkLmNvbnN0cnVjdG9ycyIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIENvbnN0cnVjdG9ycyBmcm9tIFN1cGVyY2xhc3MiIGRlc2NyaXB0aW9uPSJFdmFsdWF0ZSBhbmQgYWRkIGNvbnN0cnVjdG9ycyBmcm9tIHN1cGVyY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdElDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm1hcmtUYXNrQ29tcGxldGUiIGNvbW1hbmROYW1lPSJNYXJrIFRhc2sgQ29tcGxldGUiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdElTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LndpbmRvd1N0YXJ0IiBjb21tYW5kTmFtZT0iU2VsZWN0IFdpbmRvdyBTdGFydCIgZGVzY3JpcHRpb249IlNlbGVjdCB0byB0aGUgc3RhcnQgb2YgdGhlIHdpbmRvdyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0SWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zb3VyY2UucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBTb3VyY2UgUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBzb3VyY2UgcXVpY2sgbWVudSIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0SXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guZGVjbGFyYXRpb25zLmluLnByb2plY3QiIGNvbW1hbmROYW1lPSJEZWNsYXJhdGlvbiBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBkZWNsYXJhdGlvbnMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIGVuY2xvc2luZyBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRKQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LlJldmVydCIgY29tbWFuZE5hbWU9IlJldmVydCBDb21taXQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdJbXBvcnRQcm9qZWN0cyIgY29tbWFuZE5hbWU9IkltcG9ydCBQcm9qZWN0cy4uLiIgZGVzY3JpcHRpb249IkltcG9ydCBvciBjcmVhdGUgaW4gbG9jYWwgR2l0IHJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmNvbW1hbmRzLkNvdmVyYWdlTGFzdCIgY29tbWFuZE5hbWU9IkNvdmVyYWdlIiBkZXNjcmlwdGlvbj0iQ292ZXJhZ2UiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLmNvcHlBbGxMZWZ0VG9SaWdodCIgY29tbWFuZE5hbWU9IkNvcHkgQWxsIGZyb20gTGVmdCB0byBSaWdodCIgZGVzY3JpcHRpb249IkNvcHkgQWxsIENoYW5nZXMgZnJvbSBMZWZ0IHRvIFJpZ2h0IiBjYXRlZ29yeT0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRLQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmVuYWJsZW1lbnQuc3liYXNlLmFzYS5zY2hlbWFvYmplY3RlZGl0b3IuZXhhbXBsZXMudGFibGVzY2hlbWFlZGl0b3IuY3V0Y29sdW1uIiBjb21tYW5kTmFtZT0iQ3V0IiBjYXRlZ29yeT0iX0FIQlVUaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuZGVidWcudWkuZXZhbHVhdGUuY29tbWFuZCIgY29tbWFuZE5hbWU9IkV2YWx1YXRlIiBkZXNjcmlwdGlvbj0iRXZhbHVhdGVzIHRoZSBzZWxlY3RlZCB0ZXh0IGluIHRoZSBKYXZhU2NyaXB0IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVU2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0S2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zdXJyb3VuZC53aXRoLnF1aWNrTWVudSIgY29tbWFuZE5hbWU9IlN1cnJvdW5kIFdpdGggUXVpY2sgTWVudSIgZGVzY3JpcHRpb249IlNob3dzIHRoZSBTdXJyb3VuZCBXaXRoIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEt5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkub3BlbkZpbGVTZWFyY2hQYWdlIiBjb21tYW5kTmFtZT0iRmlsZSBTZWFyY2giIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBTZWFyY2ggZGlhbG9nJ3MgZmlsZSBzZWFyY2ggcGFnZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0TEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guaW1wbGVtZW50b3JzLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IkltcGxlbWVudG9ycyBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudG9ycyBvZiB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3QWRkUmVwb3NpdG9yeSIgY29tbWFuZE5hbWU9IkFkZCBhIEdpdCBSZXBvc2l0b3J5IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmJyZWFrcG9pbnQucHJvcGVydGllcyIgY29tbWFuZE5hbWU9IkphdmEgQnJlYWtwb2ludCBQcm9wZXJ0aWVzIiBkZXNjcmlwdGlvbj0iVmlldyBhbmQgZWRpdCB0aGUgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBKYXZhIGJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdEx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkubmF2aWdhdGUub3Blbi50eXBlLmluLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9Ik9wZW4gVHlwZSBpbiBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJPcGVuIGEgdHlwZSBpbiB0aGUgdHlwZSBoaWVyYXJjaHkgdmlldyIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0TUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQudGFzay5jbGVhckFjdGl2ZVRpbWUiIGNvbW1hbmROYW1lPSJDbGVhciBBY3RpdmUgVGltZSIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0TVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5jb3B5QnVpbGRJZENvbW1hbmQiIGNvbW1hbmROYW1lPSJDb3B5IEJ1aWxkIElkIEluZm9ybWF0aW9uIFRvIENsaXBib2FyZCIgZGVzY3JpcHRpb249IkNvcGllcyB0aGUgYnVpbGQgaWRlbnRpZmljYXRpb24gaW5mb3JtYXRpb24gdG8gdGhlIGNsaXBib2FyZC4iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkuY29tbWFuZHMucmVmcmVzaHByb2plY3QiIGNvbW1hbmROYW1lPSJSZWZyZXNoIEdyYWRsZSBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU3luY2hyb25pemVzIHRoZSBHcmFkbGUgYnVpbGRzIG9mIHRoZSBzZWxlY3RlZCBwcm9qZWN0cyB3aXRoIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVUtpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2VsZWN0LnRleHRFbmQiIGNvbW1hbmROYW1lPSJTZWxlY3QgVGV4dCBFbmQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0TkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMudGFzay5hdHRhY2hDb250ZXh0IiBjb21tYW5kTmFtZT0iQXR0YWNoIENvbnRleHQiIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdE5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldy5wcm9jZXNzb3IueHBhdGhwcm9jZXNzb3IiIGNvbW1hbmROYW1lPSJYUGF0aCBQcm9jZXNzb3IiIGNhdGVnb3J5PSJfQUhCVU95eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdE5peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcy5yYWRpb1N0YXRlUGFyYW1ldGVyIiBuYW1lPSJTdGF0ZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Tnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLndvcmRQcmV2aW91cyIgY29tbWFuZE5hbWU9IlByZXZpb3VzIFdvcmQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgcHJldmlvdXMgd29yZCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0T0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLmNvbm5lY3Rvci5sb2NhbC5jb21tYW5kLmxhdW5jaCIgY29tbWFuZE5hbWU9Ik9wZW4gTG9jYWwgVGVybWluYWwgb24gU2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVTeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnByZWZlcmVuY2VzIiBjb21tYW5kTmFtZT0iUHJlZmVyZW5jZXMiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdE9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJwcmVmZXJlbmNlUGFnZUlkIiBuYW1lPSJQcmVmZXJlbmNlIFBhZ2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubTJlLnNvdXJjZWxvb2t1cC51aS5vcGVuU291cmNlTG9va3VwSW5mb0RpYWxvZyIgY29tbWFuZE5hbWU9IlNvdXJjZSBMb29rdXAgSW5mbyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0UEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LlNxdWFzaCIgY29tbWFuZE5hbWU9IlNxdWFzaCBDb21taXRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5jb3B5IiBjb21tYW5kTmFtZT0iQ29weSIgZGVzY3JpcHRpb249IkNvcHkgdGhlIHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRQaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93Lm5leHRWaWV3IiBjb21tYW5kTmFtZT0iTmV4dCBWaWV3IiBkZXNjcmlwdGlvbj0iU3dpdGNoIHRvIHRoZSBuZXh0IHZpZXciIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnJldmVydFRvU2F2ZWQiIGNvbW1hbmROYW1lPSJSZXZlcnQgdG8gU2F2ZWQiIGRlc2NyaXB0aW9uPSJSZXZlcnQgdG8gdGhlIGxhc3Qgc2F2ZWQgc3RhdGUiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLk5ld1Byb3BlcnR5U2hlZXRDb21tYW5kIiBjb21tYW5kTmFtZT0iUHJvcGVydGllcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0UVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1blRvTGluZSIgY29tbWFuZE5hbWU9IlJ1biB0byBMaW5lIiBkZXNjcmlwdGlvbj0iUmVzdW1lIGFuZCBicmVhayB3aGVuIGV4ZWN1dGlvbiByZWFjaGVzIHRoZSBjdXJyZW50IGxpbmUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5uYXZpZ2F0ZS5qYXZhLm9wZW4uc3RydWN0dXJlIiBjb21tYW5kTmFtZT0iT3BlbiBTdHJ1Y3R1cmUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuRXF1aW5veExhdW5jaFNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgT1NHaSBGcmFtZXdvcmsiIGRlc2NyaXB0aW9uPSJEZWJ1ZyBPU0dpIEZyYW1ld29yayIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0UkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld1Bhc3RlIiBjb21tYW5kTmFtZT0iUGFzdGUgUmVwb3NpdG9yeSBQYXRoIG9yIFVSSSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0UlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zaG93Q2hhbmdlUnVsZXJJbmZvcm1hdGlvbiIgY29tbWFuZE5hbWU9IlNob3cgUXVpY2sgRGlmZiBSdWxlciBUb29sdGlwIiBkZXNjcmlwdGlvbj0iRGlzcGxheXMgcXVpY2sgZGlmZiBvciByZXZpc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGNhcmV0IGxpbmUgaW4gYSBmb2N1c2VkIGhvdmVyIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRSaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnVwcGVyQ2FzZSIgY29tbWFuZE5hbWU9IlRvIFVwcGVyIENhc2UiIGRlc2NyaXB0aW9uPSJDaGFuZ2VzIHRoZSBzZWxlY3Rpb24gdG8gdXBwZXIgY2FzZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Unl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5Db25maWd1cmVGZXRjaCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBVcHN0cmVhbSBGZXRjaCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0U0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLmdvSW50byIgY29tbWFuZE5hbWU9IkdvIEludG8iIGRlc2NyaXB0aW9uPSJOYXZpZ2F0ZSBpbnRvIHRoZSBzZWxlY3RlZCBpdGVtIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5Db25maWd1cmVVcHN0cmVhbVB1c2giIGNvbW1hbmROYW1lPSJDb25maWd1cmUgVXBzdHJlYW0gUHVzaCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0U2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLk9wZW5SdW5Db25maWd1cmF0aW9ucyIgY29tbWFuZE5hbWU9IlJ1bi4uLiIgZGVzY3JpcHRpb249Ik9wZW4gcnVuIGxhdW5jaCBjb25maWd1cmF0aW9uIGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0U3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3Qud2luZG93RW5kIiBjb21tYW5kTmFtZT0iU2VsZWN0IFdpbmRvdyBFbmQiIGRlc2NyaXB0aW9uPSJTZWxlY3QgdG8gdGhlIGVuZCBvZiB0aGUgd2luZG93IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRUQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5yZXNldE9uRHVtcCIgY29tbWFuZE5hbWU9IlJlc2V0IG9uIER1bXAiIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cubWluaW1pemVQYXJ0IiBjb21tYW5kTmFtZT0iTWluaW1pemUgQWN0aXZlIFZpZXcgb3IgRWRpdG9yIiBkZXNjcmlwdGlvbj0iTWluaW1pemVzIHRoZSBhY3RpdmUgdmlldyBvciBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5jb21tYW5kMSIgY29tbWFuZE5hbWU9IlRlcm1pbmFsIHZpZXcgaW5zZXJ0IiBjYXRlZ29yeT0iX0FIQlVVeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRUeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlVudHJhY2siIGNvbW1hbmROYW1lPSJVbnRyYWNrIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRVQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5hZGQuYmxvY2suY29tbWVudCIgY29tbWFuZE5hbWU9IkFkZCBCbG9jayBDb21tZW50IiBkZXNjcmlwdGlvbj0iQWRkIEJsb2NrIENvbW1lbnQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuc2hvd1N5c3RlbU1lbnUiIGNvbW1hbmROYW1lPSJTaG93IFN5c3RlbSBNZW51IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgc3lzdGVtIG1lbnUiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuQWxsSW5zdGFuY2VzIiBjb21tYW5kTmFtZT0iQWxsIEluc3RhbmNlcyIgZGVzY3JpcHRpb249IlZpZXcgYWxsIGluc3RhbmNlcyBvZiB0aGUgc2VsZWN0ZWQgdHlwZSBsb2FkZWQgaW4gdGhlIHRhcmdldCBWTSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0VXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5PcGVuSW5Db21taXRWaWV3ZXJDb21tYW5kIiBjb21tYW5kTmFtZT0iT3BlbiBpbiBDb21taXQgVmlld2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRWQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnRvZ2dsZS5jb21tZW50IiBjb21tYW5kTmFtZT0iVG9nZ2xlIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJUb2dnbGUgY29tbWVudCB0aGUgc2VsZWN0ZWQgbGluZXMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuYWN0aW9ucy5MaWZlQ3ljbGVUZXN0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBNYXZlbiBUZXN0IiBkZXNjcmlwdGlvbj0iUnVuIE1hdmVuIFRlc3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLmxhdW5jaHNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBYU0xUIFRyYW5zZm9ybWF0aW9uIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgY29uZmlndXJhdGlvbiB0byBkZWJ1ZyBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRWeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5pbnRlcm5hbC5hY3Rpb25zLnJlbWFwdG9wcm9qZWN0Y29tbWFuZCIgY29tbWFuZE5hbWU9Ikxpbmsgd2l0aCBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iTGluayB0aGUgY2xvdWQgYXBwbGljYXRpb24gd2l0aCB0aGUgcHJvamVjdC4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuc2F2ZVBlcnNwZWN0aXZlIiBjb21tYW5kTmFtZT0iU2F2ZSBQZXJzcGVjdGl2ZSBBcyIgZGVzY3JpcHRpb249IlNhdmUgdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS51c2Uuc3VwZXJ0eXBlIiBjb21tYW5kTmFtZT0iVXNlIFN1cGVydHlwZSBXaGVyZSBQb3NzaWJsZSIgZGVzY3JpcHRpb249IkNoYW5nZSBvY2N1cnJlbmNlcyBvZiBhIHR5cGUgdG8gdXNlIGEgc3VwZXJ0eXBlIGluc3RlYWQiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5hc3NpZ25QYXJhbVRvRmllbGQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIHBhcmFtZXRlciB0byBmaWVsZCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBc3NpZ24gcGFyYW1ldGVyIHRvIGZpZWxkJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0V3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWFuZC5jb25maWd1cmVUcmFjZSIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBHaXQgRGVidWcgVHJhY2UiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEubW92ZS5pbm5lci50by50b3AubGV2ZWwiIGNvbW1hbmROYW1lPSJNb3ZlIFR5cGUgdG8gTmV3IEZpbGUiIGRlc2NyaXB0aW9uPSJNb3ZlIFR5cGUgdG8gTmV3IEZpbGUiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5saW5rV2l0aEVkaXRvciIgY29tbWFuZE5hbWU9IlRvZ2dsZSBMaW5rIHdpdGggRWRpdG9yIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyBsaW5raW5nIG9mIGEgdmlldydzIHNlbGVjdGlvbiB3aXRoIHRoZSBhY3RpdmUgZWRpdG9yJ3Mgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRYaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5vcGVuLmZpbGUuZnJvbS5zb3VyY2UiIGNvbW1hbmROYW1lPSJPcGVuIFNlbGVjdGlvbiIgZGVzY3JpcHRpb249Ik9wZW4gYW4gZWRpdG9yIG9uIHRoZSBzZWxlY3RlZCBsaW5rIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRYeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm9wZW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iUXVpY2sgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgcXVpY2sgaGllcmFyY2h5IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRZQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnRvZ2dsZUJsb2NrU2VsZWN0aW9uTW9kZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBCbG9jayBTZWxlY3Rpb24iIGRlc2NyaXB0aW9uPSJUb2dnbGUgYmxvY2sgLyBjb2x1bW4gc2VsZWN0aW9uIGluIHRoZSBjdXJyZW50IHRleHQgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRZU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5nb3RvLm1hdGNoaW5nLmJyYWNrZXQiIGNvbW1hbmROYW1lPSJNYXRjaGluZyBDaGFyYWN0ZXIiIGRlc2NyaXB0aW9uPSJHbyB0byBNYXRjaGluZyBDaGFyYWN0ZXIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEucmVmYWN0b3IucXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBSZWZhY3RvciBRdWljayBNZW51IiBkZXNjcmlwdGlvbj0iU2hvd3MgdGhlIHJlZmFjdG9yIHF1aWNrIG1lbnUiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tcGFyZUluZGV4V2l0aEhlYWQiIGNvbW1hbmROYW1lPSJDb21wYXJlIEZpbGUgaW4gSW5kZXggd2l0aCBIRUFEIFJldmlzaW9uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRaQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm92ZXJyaWRlLm1ldGhvZHMiIGNvbW1hbmROYW1lPSJPdmVycmlkZS9JbXBsZW1lbnQgTWV0aG9kcyIgZGVzY3JpcHRpb249Ik92ZXJyaWRlIG9yIGltcGxlbWVudCBtZXRob2RzIGZyb20gc3VwZXIgdHlwZXMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdFpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVmZXJlbmNlcy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJSZWZlcmVuY2VzIGluIFdvcmtzcGFjZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRaaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpheGIuZWNsaXBzZWxpbmsudWkuY29tbWFuZC5hZGRFY2xpcHNlTGlua0pheGJQcm9wZXJ0eSIgY29tbWFuZE5hbWU9IkFkZCBFY2xpcHNlTGluayBKQVhCIHByb3BlcnR5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRaeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudWkuY29udmVydFRvRG9jYm9va0NvbW1hbmQiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBEb2Nib29rIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRhQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucGFydC5uZXh0UGFnZSIgY29tbWFuZE5hbWU9Ik5leHQgUGFnZSIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgbmV4dCBwYWdlIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRhU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNoYW5nZS50eXBlIiBjb21tYW5kTmFtZT0iR2VuZXJhbGl6ZSBEZWNsYXJlZCBUeXBlIiBkZXNjcmlwdGlvbj0iQ2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZiBhIHNlbGVjdGVkIHZhcmlhYmxlIHRvIGEgbW9yZSBnZW5lcmFsIHR5cGUgY29uc2lzdGVudCB3aXRoIHVzYWdlIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRhaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNyZWF0ZUJyYW5jaCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBCcmFuY2giIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5mb2xkaW5nLmNvbGxhcHNlQ29tbWVudHMiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSBDb21tZW50cyIgZGVzY3JpcHRpb249IkNvbGxhcHNlIGFsbCBjb21tZW50cyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0YkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuUmVwb3NpdG9yaWVzVmlld0Nsb25lIiBjb21tYW5kTmFtZT0iQ2xvbmUgYSBHaXQgUmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0YlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5jbGVhci5tYXJrIiBjb21tYW5kTmFtZT0iQ2xlYXIgTWFyayIgZGVzY3JpcHRpb249IkNsZWFyIHRoZSBtYXJrIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRiaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5xdWlja19vdXRsaW5lIiBjb21tYW5kTmFtZT0iUXVpY2sgT3V0bGluZSIgZGVzY3JpcHRpb249IlNob3cgdGhlIHF1aWNrIG91dGxpbmUgZm9yIHRoZSBlZGl0b3IgaW5wdXQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5pbmxpbmUiIGNvbW1hbmROYW1lPSJJbmxpbmUiIGRlc2NyaXB0aW9uPSJJbmxpbmUgYSBjb25zdGFudCwgbG9jYWwgdmFyaWFibGUgb3IgZnVuY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdSZW1vdmUiIGNvbW1hbmROYW1lPSJSZW1vdmUgUmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Y1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlBhY2thZ2VzVmlldyIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgRm9sZGVycyIgZGVzY3JpcHRpb249IlNob3cgdGhlIEZvbGRlcnMgdmlldyIgY2F0ZWdvcnk9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Y2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFudC51aS5vcGVuRXh0ZXJuYWxEb2MiIGNvbW1hbmROYW1lPSJPcGVuIEV4dGVybmFsIERvY3VtZW50YXRpb24iIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBFeHRlcm5hbCBkb2N1bWVudGF0aW9uIGZvciB0aGUgY3VycmVudCB0YXNrIGluIHRoZSBBbnQgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRjeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Q3JlYXRlUmVwb3NpdG9yeSIgY29tbWFuZE5hbWU9IkNyZWF0ZSBhIFJlcG9zaXRvcnkiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLndyaXRlLmFjY2Vzcy5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJXcml0ZSBBY2Nlc3MgaW4gSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGl0cyBoaWVyYXJjaHkiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUHVzaFRhZ3MiIGNvbW1hbmROYW1lPSJQdXNoIFRhZ3MuLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLkNvbnRpbnVlUmViYXNlIiBjb21tYW5kTmFtZT0iQ29udGludWUgUmViYXNlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRkeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5kaXNjb25uZWN0Y29tbWFuZCIgY29tbWFuZE5hbWU9IkRpc2Nvbm5lY3QiIGRlc2NyaXB0aW9uPSJEaXNjb25uZWN0IFNlcnZlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0ZUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuY2xvc2VUcmF5IiBjb21tYW5kTmFtZT0iQ2xvc2UgVXNlciBBc3Npc3RhbmNlIFRyYXkiIGRlc2NyaXB0aW9uPSJDbG9zZSB0aGUgdXNlciBhc3Npc3RhbmNlIHRyYXkgY29udGFpbmluZyBjb250ZXh0IGhlbHAgaW5mb3JtYXRpb24gYW5kIGNoZWF0IHNoZWV0cy4iIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuQ3JlYXRlUGF0Y2giIGNvbW1hbmROYW1lPSJDcmVhdGUgUGF0Y2giIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5SZXN1bWUiIGNvbW1hbmROYW1lPSJSZXN1bWUiIGRlc2NyaXB0aW9uPSJSZXN1bWUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS50b2dnbGUuY29tbWVudCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBDb21tZW50IiBkZXNjcmlwdGlvbj0iVG9nZ2xlIGNvbW1lbnQgdGhlIHNlbGVjdGVkIGxpbmVzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRmQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy5vcGVuLmNvbnRleHQuZGlhbG9nIiBjb21tYW5kTmFtZT0iU2hvdyBDb250ZXh0IFF1aWNrIFZpZXciIGRlc2NyaXB0aW9uPSJTaG93IENvbnRleHQgUXVpY2sgVmlldyIgY2F0ZWdvcnk9Il9BSEJVTEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0ZlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUucmVzdGFydFdvcmtiZW5jaCIgY29tbWFuZE5hbWU9IlJlc3RhcnQiIGRlc2NyaXB0aW9uPSJSZXN0YXJ0IHRoZSB3b3JrYmVuY2giIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVhZC5hY2Nlc3MuaW4ucHJvamVjdCIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlYWQgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgZW5jbG9zaW5nIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tcGFyZVdpdGhSZWYiIGNvbW1hbmROYW1lPSJDb21wYXJlIHdpdGggQnJhbmNoLCBUYWcgb3IgUmVmZXJlbmNlLi4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRnQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy5hdHRhY2htZW50LnJldHJpZXZlQ29udGV4dCIgY29tbWFuZE5hbWU9IlJldHJpZXZlIENvbnRleHQgQXR0YWNobWVudCIgY2F0ZWdvcnk9Il9BSEJVTEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Z1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC50b2dnbGVPdmVyd3JpdGUiIGNvbW1hbmROYW1lPSJUb2dnbGUgT3ZlcndyaXRlIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIG92ZXJ3cml0ZSBtb2RlIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRnaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnB1bGwudXAiIGNvbW1hbmROYW1lPSJQdWxsIFVwIiBkZXNjcmlwdGlvbj0iTW92ZSBtZW1iZXJzIHRvIGEgc3VwZXJjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0Z3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5mb2xkaW5nLmNvbGxhcHNlX2FsbCIgY29tbWFuZE5hbWU9IkNvbGxhcHNlIEFsbCIgZGVzY3JpcHRpb249IkNvbGxhcHNlcyBhbGwgZm9sZGVkIHJlZ2lvbnMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zdXJyb3VuZC53aXRoLnRyeS5jYXRjaCIgY29tbWFuZE5hbWU9IlN1cnJvdW5kIHdpdGggdHJ5L2NhdGNoIEJsb2NrIiBkZXNjcmlwdGlvbj0iU3Vycm91bmQgdGhlIHNlbGVjdGVkIHRleHQgd2l0aCBhIHRyeS9jYXRjaCBibG9jayIgY2F0ZWdvcnk9Il9BSEJVTFN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0aFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQuUmVmcmVzaFJlcG9zaXRvcnlUYXNrcyIgY29tbWFuZE5hbWU9IlN5bmNocm9uaXplIENoYW5nZWQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Ub2dnbGVXYXRjaHBvaW50IiBjb21tYW5kTmFtZT0iVG9nZ2xlIFdhdGNocG9pbnQiIGRlc2NyaXB0aW9uPSJDcmVhdGVzIG9yIHJlbW92ZXMgYSB3YXRjaHBvaW50IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRoeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi51aS5kaXNjb3ZlcnkuY29tbWFuZHMuU2hvd1JlcG9zaXRvcnlDYXRhbG9nIiBjb21tYW5kTmFtZT0iU2hvdyBSZXBvc2l0b3J5IENhdGFsb2ciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdGlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVpLmRpc2NvdmVyeS5jb21tYW5kcy5SZXBvc2l0b3J5UGFyYW1ldGVyIiBuYW1lPSJQMiBSZXBvc2l0b3J5IFVSSSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5jbG9zZVJlbmRlcmluZyIgY29tbWFuZE5hbWU9IkNsb3NlIFJlbmRlcmluZyIgZGVzY3JpcHRpb249IkNsb3NlIHRoZSBzZWxlY3RlZCByZW5kZXJpbmcuIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRpaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3T3BlbkluRWRpdG9yIiBjb21tYW5kTmFtZT0iT3BlbiBpbiBFZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5pbnRyb2R1Y2UucGFyYW1ldGVyIiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIFBhcmFtZXRlciIgZGVzY3JpcHRpb249IkludHJvZHVjZSBhIG5ldyBmdW5jdGlvbiBwYXJhbWV0ZXIgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGV4cHJlc3Npb24iIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uc3VibW9kdWxlLnVwZGF0ZSIgY29tbWFuZE5hbWU9IlVwZGF0ZSBTdWJtb2R1bGUiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5Qcm9maWxlTGFzdCIgY29tbWFuZE5hbWU9IlByb2ZpbGUiIGRlc2NyaXB0aW9uPSJMYXVuY2ggaW4gcHJvZmlsZSBtb2RlIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRqaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlB1bGwiIGNvbW1hbmROYW1lPSJQdWxsIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRqeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuVHlwZUhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgVHlwZSBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBUeXBlIEhpZXJhcmNoeSB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRrQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnN3YXAubWFyayIgY29tbWFuZE5hbWU9IlN3YXAgTWFyayIgZGVzY3JpcHRpb249IlN3YXAgdGhlIG1hcmsgd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRrU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uYWRkQ2FzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIEFkZCBjYXN0IiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0FkZCBjYXN0JyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0a2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuY29tbWFuZHMuaW50ZXJlc3QuaW5jcmVtZW50IiBjb21tYW5kTmFtZT0iTWFrZSBMYW5kbWFyayIgZGVzY3JpcHRpb249Ik1ha2UgTGFuZG1hcmsiIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGt5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5hZGQuamF2YWRvYy5jb21tZW50IiBjb21tYW5kTmFtZT0iQWRkIEpTRG9jIENvbW1lbnQiIGRlc2NyaXB0aW9uPSJBZGQgYSBKU0RvYyBjb21tZW50IHN0dWIgdG8gdGhlIG1lbWJlciBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJRdWljayBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBxdWljayBoaWVyYXJjaHkgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGxTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1ZpZXdDb25maWd1cmVGZXRjaCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBGZXRjaC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMudWkuY29udmVydC5qYXZhZG9jcyIgY29tbWFuZE5hbWU9IkNvbnZlcnQgQVBJIFRvb2xzICZhbXA7SmF2YWRvYyBUYWdzLi4uIiBkZXNjcmlwdGlvbj0iU3RhcnRzIGEgd2l6YXJkIHRoYXQgd2lsbCBhbGxvdyB5b3UgdG8gY29udmVydCBleGlzdGluZyBKYXZhZG9jIHRhZ3MgdG8gYW5ub3RhdGlvbnMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdGx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5leHRlcm5hbC5qYXZhZG9jIiBjb21tYW5kTmFtZT0iT3BlbiBBdHRhY2hlZCBKYXZhZG9jIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgYXR0YWNoZWQgSmF2YWRvYyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhIGJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuRXF1aW5veExhdW5jaFNob3J0Y3V0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBPU0dpIEZyYW1ld29yayIgZGVzY3JpcHRpb249IlJ1biBPU0dpIEZyYW1ld29yayIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zaGlmdExlZnQiIGNvbW1hbmROYW1lPSJTaGlmdCBMZWZ0IiBkZXNjcmlwdGlvbj0iU2hpZnQgYSBibG9jayBvZiB0ZXh0IHRvIHRoZSBsZWZ0IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRtaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHJ1Y3R1cmUuc2VsZWN0Lm5leHQiIGNvbW1hbmROYW1lPSJTZWxlY3QgTmV4dCBFbGVtZW50IiBkZXNjcmlwdGlvbj0iRXhwYW5kIHNlbGVjdGlvbiB0byBpbmNsdWRlIG5leHQgc2libGluZyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5QdXNoIiBjb21tYW5kTmFtZT0iUHVzaC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kcy5BZGRDbGFzc1ByZXBhcmVCcmVha3BvaW50IiBjb21tYW5kTmFtZT0iQWRkIENsYXNzIExvYWQgQnJlYWtwb2ludCIgZGVzY3JpcHRpb249IkFkZCBhIGNsYXNzIGxvYWQgYnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0blN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuY29udmVydEphdmFQcm9qZWN0VG9KcGEiIGNvbW1hbmROYW1lPSJDb252ZXJ0IHRvIEpQQSBQcm9qZWN0Li4uIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRuaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZW1mLmNvZGVnZW4uZWNvcmUudWkuR2VuZXJhdGUiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBDb2RlIiBkZXNjcmlwdGlvbj0iR2VuZXJhdGUgY29kZSBmb3IgdGhlIEVNRiBtb2RlbHMgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0bnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmdlbmVyYXRlLmphdmFkb2MiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBKU0RvYyIgZGVzY3JpcHRpb249IkdlbmVyYXRlcyBKU0RvYyBmb3IgYSBzZWxlY3RhYmxlIHNldCBvZiBKYXZhU2NyaXB0IHJlc291cmNlcyIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0b0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5zdGFzaC5kcm9wIiBjb21tYW5kTmFtZT0iRGVsZXRlIFN0YXNoZWQgQ29tbWl0Li4uIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRvU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgY29tbWFuZE5hbWU9IkRlYnVnIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgZGVidWcgcGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVZ5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdG9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50aXBzLmlkZS5jb21tYW5kLm9wZW4iIGNvbW1hbmROYW1lPSJUaXAgb2YgdGhlIERheSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0b3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNvdXJjZS5xdWlja01lbnUiIGNvbW1hbmROYW1lPSJTaG93IFNvdXJjZSBRdWljayBNZW51IiBkZXNjcmlwdGlvbj0iU2hvd3MgdGhlIHNvdXJjZSBxdWljayBtZW51IiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLnNwZWNpZmljX2NvbnRlbnRfYXNzaXN0LmNvbW1hbmQiIGNvbW1hbmROYW1lPSJDb250ZW50IEFzc2lzdCIgZGVzY3JpcHRpb249IkEgcGFyYW1ldGVyaXphYmxlIGNvbW1hbmQgdGhhdCBpbnZva2VzIGNvbnRlbnQgYXNzaXN0IHdpdGggYSBzaW5nbGUgY29tcGxldGlvbiBwcm9wb3NhbCBjYXRlZ29yeSIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0cFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5zcGVjaWZpY19jb250ZW50X2Fzc2lzdC5jYXRlZ29yeV9pZCIgbmFtZT0idHlwZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVmZXJlbmNlcy5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJSZWZlcmVuY2VzIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVmZXJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuZXhwYW5kQWxsIiBjb21tYW5kTmFtZT0iRXhwYW5kIEFsbCIgZGVzY3JpcHRpb249IkV4cGFuZCB0aGUgY3VycmVudCB0cmVlIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRxQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5zYXZlQWxsIiBjb21tYW5kTmFtZT0iU2F2ZSBBbGwiIGRlc2NyaXB0aW9uPSJTYXZlIGFsbCBjdXJyZW50IGNvbnRlbnRzIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRxU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5tZXRob2QuZXhpdHMiIGNvbW1hbmROYW1lPSJTZWFyY2ggTWV0aG9kIEV4aXQgT2NjdXJyZW5jZXMgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgbWV0aG9kIGV4aXQgb2NjdXJyZW5jZXMgb2YgYSBzZWxlY3RlZCByZXR1cm4gdHlwZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmdvdG8ubWF0Y2hpbmcuYnJhY2tldCIgY29tbWFuZE5hbWU9IkdvIHRvIE1hdGNoaW5nIEJyYWNrZXQiIGRlc2NyaXB0aW9uPSJNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBtYXRjaGluZyBicmFja2V0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmZvbGRpbmcuY29sbGFwc2VNZW1iZXJzIiBjb21tYW5kTmFtZT0iQ29sbGFwc2UgTWVtYmVycyIgZGVzY3JpcHRpb249IkNvbGxhcHNlIGFsbCBtZW1iZXJzIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5jbG9zZU90aGVycyIgY29tbWFuZE5hbWU9IkNsb3NlIE90aGVycyIgZGVzY3JpcHRpb249IkNsb3NlIGFsbCBlZGl0b3JzIGV4Y2VwdCB0aGUgb25lIHRoYXQgaXMgYWN0aXZlIiBjYXRlZ29yeT0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEucmVuYW1lLmVsZW1lbnQiIGNvbW1hbmROYW1lPSJSZW5hbWUgLSBSZWZhY3RvcmluZyAiIGRlc2NyaXB0aW9uPSJSZW5hbWUgdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnF1aWNrZGlmZi5yZXZlcnRMaW5lIiBjb21tYW5kTmFtZT0iUmV2ZXJ0IExpbmUiIGRlc2NyaXB0aW9uPSJSZXZlcnQgdGhlIGN1cnJlbnQgbGluZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0cnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLk9wZW5EZWJ1Z0NvbmZpZ3VyYXRpb25zIiBjb21tYW5kTmFtZT0iRGVidWcuLi4iIGRlc2NyaXB0aW9uPSJPcGVuIGRlYnVnIGxhdW5jaCBjb25maWd1cmF0aW9uIGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0c0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEuZWNsaXBzZWxpbmsudWkuZ2VuZXJhdGVEeW5hbWljRW50aXRpZXMiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBEeW5hbWljIEVudGl0aWVzIGZyb20gVGFibGVzLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlNpbXBsZUZldGNoIiBjb21tYW5kTmFtZT0iRmV0Y2ggZnJvbSBVcHN0cmVhbSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0c2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5zb3VyY2Vsb29rdXAudWkuaW1wb3J0QmluYXJ5UHJvamVjdCIgY29tbWFuZE5hbWU9IkltcG9ydCBCaW5hcnkgUHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0c3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5wcmV2aW91c0VkaXRvciIgY29tbWFuZE5hbWU9IlByZXZpb3VzIEVkaXRvciIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgcHJldmlvdXMgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmNvcHkucXVhbGlmaWVkLm5hbWUiIGNvbW1hbmROYW1lPSJDb3B5IFF1YWxpZmllZCBOYW1lIiBkZXNjcmlwdGlvbj0iQ29weSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnByb21vdGUubG9jYWwudmFyaWFibGUiIGNvbW1hbmROYW1lPSJDb252ZXJ0IExvY2FsIFZhcmlhYmxlIHRvIEZpZWxkIiBkZXNjcmlwdGlvbj0iQ29udmVydCBhIGxvY2FsIHZhcmlhYmxlIHRvIGEgZmllbGQiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuem9vbUluIiBjb21tYW5kTmFtZT0iWm9vbSBJbiIgZGVzY3JpcHRpb249Ilpvb20gaW4gdGV4dCwgaW5jcmVhc2UgZGVmYXVsdCBmb250IHNpemUgZm9yIHRleHQgZWRpdG9ycyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5PcGVuTWFya2Vyc1ZpZXciIGNvbW1hbmROYW1lPSJPcGVuIEFub3RoZXIiIGRlc2NyaXB0aW9uPSJPcGVuIGFub3RoZXIgdmlldyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLlBhY2thZ2VFeHBsb3JlciIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgU2NyaXB0IEV4cGxvcmVyIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgU2NyaXB0IEV4cGxvcmVyIiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR1U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcnJlY3Rpb24uY2hhbmdlVG9TdGF0aWMiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBDaGFuZ2UgdG8gc3RhdGljIGFjY2VzcyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdDaGFuZ2UgdG8gc3RhdGljIGFjY2VzcyciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5uZXdSZW5kZXJpbmciIGNvbW1hbmROYW1lPSJOZXcgUmVuZGVyaW5nIiBkZXNjcmlwdGlvbj0iQWRkIGEgbmV3IHJlbmRlcmluZy4iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0LmNsb3NlVW5yZWxhdGVkUHJvamVjdHMiIGNvbW1hbmROYW1lPSJDbG9zZSBVbnJlbGF0ZWQgUHJvamVjdHMiIGRlc2NyaXB0aW9uPSJDbG9zZSB1bnJlbGF0ZWQgcHJvamVjdHMiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VsZi5lbmNhcHN1bGF0ZS5maWVsZCIgY29tbWFuZE5hbWU9IkVuY2Fwc3VsYXRlIEZpZWxkIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGdldHRpbmcgYW5kIHNldHRpbmcgbWV0aG9kcyBmb3IgdGhlIGZpZWxkIGFuZCB1c2Ugb25seSB0aG9zZSB0byBhY2Nlc3MgdGhlIGZpZWxkIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLm1hcmtlcnMuY29weU1hcmtlclJlc291cmNlUXVhbGlmaWVkTmFtZSIgY29tbWFuZE5hbWU9IkNvcHkgUmVzb3VyY2UgUXVhbGlmaWVkIE5hbWUgVG8gQ2xpcGJvYXJkIiBkZXNjcmlwdGlvbj0iQ29waWVzIG1hcmtlcnMgcmVzb3VyY2UgcXVhbGlmaWVkIG5hbWUgdG8gdGhlIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5ydW50aW1lV29ya2JlbmNoU2hvcnRjdXQucnVuIiBjb21tYW5kTmFtZT0iUnVuIEVjbGlwc2UgQXBwbGljYXRpb24iIGRlc2NyaXB0aW9uPSJSdW4gRWNsaXBzZSBBcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0dnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS5wZXJmb3JtVGV4dFNlYXJjaFdvcmtzcGFjZSIgY29tbWFuZE5hbWU9IkZpbmQgVGV4dCBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2hlcyB0aGUgZmlsZXMgaW4gdGhlIHdvcmtzcGFjZSBmb3Igc3BlY2lmaWMgdGV4dC4iIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5leHRyYWN0LnN1cGVyY2xhc3MiIGNvbW1hbmROYW1lPSJFeHRyYWN0IFN1cGVyY2xhc3MiIGRlc2NyaXB0aW9uPSJFeHRyYWN0IGEgc2V0IG9mIG1lbWJlcnMgaW50byBhIG5ldyBzdXBlcmNsYXNzIGFuZCB0cnkgdG8gdXNlIHRoZSBuZXcgc3VwZXJjbGFzcyIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0d1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVtb3ZlLmJsb2NrLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJSZW1vdmUgQmxvY2sgQ29tbWVudCIgZGVzY3JpcHRpb249IlJlbW92ZSBCbG9jayBDb21tZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuc3B5LmNvbW1hbmRzLm1lbnVTcHlDb21tYW5kIiBjb21tYW5kTmFtZT0iUGx1Zy1pbiBNZW51IFNweSIgZGVzY3JpcHRpb249IlNob3cgdGhlIFBsdWctaW4gU3B5IiBjYXRlZ29yeT0iX0FIQlVXeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR3eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5lbnRpdHlNYXBwaW5nc0FkZFBlcnNpc3RlbnRDbGFzcyIgY29tbWFuZE5hbWU9IkFkZCBDbGFzcy4uLiIgY2F0ZWdvcnk9Il9BSEJVUEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmdlbmVyYXRlLmNvbnN0cnVjdG9yLnVzaW5nLmZpZWxkcyIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIENvbnN0cnVjdG9yIHVzaW5nIFZhcnMiIGRlc2NyaXB0aW9uPSJDaG9vc2UgdmFycyB0byBpbml0aWFsaXplIGFuZCBjb25zdHJ1Y3RvciBmcm9tIHN1cGVyY2xhc3MgdG8gY2FsbCAiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkubmF2aWdhdGUuZ290b3R5cGUiIGNvbW1hbmROYW1lPSJHbyB0byBUeXBlIiBkZXNjcmlwdGlvbj0iR28gdG8gVHlwZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmNvbW1hbmQub3BlblBvbSIgY29tbWFuZE5hbWU9Ik9wZW4gTWF2ZW4gUE9NIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmluZGV4LnJlYnVpbGQiIGNvbW1hbmROYW1lPSJSZWJ1aWxkIEphdmEgSW5kZXgiIGRlc2NyaXB0aW9uPSJSZWJ1aWxkcyB0aGUgSmF2YSBpbmRleCBkYXRhYmFzZSIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQuYWRkQm9va21hcmsiIGNvbW1hbmROYW1lPSJBZGQgQm9va21hcmsiIGRlc2NyaXB0aW9uPSJBZGQgYSBib29rbWFyayIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQiIGNvbW1hbmROYW1lPSImYW1wO1JlbmFtZSBYU0QgZWxlbWVudCIgZGVzY3JpcHRpb249IlJlbmFtZSBYU0QgZWxlbWVudCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0eWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZXQubWFyayIgY29tbWFuZE5hbWU9IlNldCBNYXJrIiBkZXNjcmlwdGlvbj0iU2V0IHRoZSBtYXJrIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXR5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5nb1RvUHJldmlvdXNVbnJlYWQiIGNvbW1hbmROYW1lPSJHbyBUbyBQcmV2aW91cyBVbnJlYWQgVGFzayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0ekN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlbGVjdC5uZXh0IiBjb21tYW5kTmFtZT0iU2VsZWN0IE5leHQgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBuZXh0IHNpYmxpbmciIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5zcGxpdEpvaW5WYXJpYWJsZURlY2xhcmF0aW9uLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIFNwbGl0L0pvaW4gdmFyaWFibGUgZGVjbGFyYXRpb24iIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnU3BsaXQvSm9pbiB2YXJpYWJsZSBkZWNsYXJhdGlvbiciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdHppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93VmlldyIgY29tbWFuZE5hbWU9IlNob3cgVmlldyIgZGVzY3JpcHRpb249IlNob3dzIGEgcGFydGljdWxhciB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXR6eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkudmlld3Muc2hvd1ZpZXcudmlld0lkIiBuYW1lPSJWaWV3Ii8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdDBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy5zZWNvbmRhcnlJZCIgbmFtZT0iU2Vjb25kYXJ5IElkIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdDBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5zaG93Vmlldy5tYWtlRmFzdCIgbmFtZT0iQXMgRmFzdFZpZXciLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQwaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLklnbm9yZSIgY29tbWFuZE5hbWU9Iklnbm9yZSIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0MHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LkVkaXQiIGNvbW1hbmROYW1lPSJFZGl0IENvbW1pdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0MUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnNob3dSZXNvdXJjZUJ5UGF0aCIgY29tbWFuZE5hbWU9IlNob3cgUmVzb3VyY2UgaW4gTmF2aWdhdG9yIiBkZXNjcmlwdGlvbj0iU2hvdyBhIHJlc291cmNlIGluIHRoZSBOYXZpZ2F0b3IgZ2l2ZW4gaXRzIHBhdGgiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdDFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJyZXNvdXJjZVBhdGgiIG5hbWU9IlJlc291cmNlIFBhdGgiIHR5cGVJZD0ib3JnLmVjbGlwc2UudWkuaWRlLnJlc291cmNlUGF0aCIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0MWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlNraXBBbGxCcmVha3BvaW50cyIgY29tbWFuZE5hbWU9IlNraXAgQWxsIEJyZWFrcG9pbnRzIiBkZXNjcmlwdGlvbj0iU2V0cyB3aGV0aGVyIG9yIG5vdCBhbnkgYnJlYWtwb2ludCBzaG91bGQgc3VzcGVuZCBleGVjdXRpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnNlbGVjdFJvb3RFbGVtZW50cyIgY29tbWFuZE5hbWU9IlNlbGVjdCBSb290IEVsZW1lbnRzIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXQyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0idHlwZSIgbmFtZT0idHlwZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0MlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5kZWxpbWl0ZXIud2luZG93cyIgY29tbWFuZE5hbWU9IkNvbnZlcnQgTGluZSBEZWxpbWl0ZXJzIHRvIFdpbmRvd3MgKENSTEYsIFxyXG4sIDBEMEEsICYjeGE0OyYjeGI2OykiIGRlc2NyaXB0aW9uPSJDb252ZXJ0cyB0aGUgbGluZSBkZWxpbWl0ZXJzIHRvIFdpbmRvd3MgKENSTEYsIFxyXG4sIDBEMEEsICYjeGE0OyYjeGI2OykiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmZpbmROZXh0IiBjb21tYW5kTmFtZT0iRmluZCBOZXh0IiBkZXNjcmlwdGlvbj0iRmluZCBuZXh0IGl0ZW0iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuaGlkZXRyaW1iYXJzIiBjb21tYW5kTmFtZT0iVG9nZ2xlIHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyB0b29sYmFycyIgZGVzY3JpcHRpb249IlRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdG9vbGJhcnMgb2YgdGhlIGN1cnJlbnQgd2luZG93IiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmRlY2xhcmF0aW9ucy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJEZWNsYXJhdGlvbiBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQzU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5zdXBlci5pbXBsZW1lbnRhdGlvbiIgY29tbWFuZE5hbWU9Ik9wZW4gU3VwZXIgSW1wbGVtZW50YXRpb24iIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBJbXBsZW1lbnRhdGlvbiBpbiB0aGUgU3VwZXIgVHlwZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0M2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5vcGVuUGx1Z2luQXJ0aWZhY3QiIGNvbW1hbmROYW1lPSJPcGVuIFBsdWctaW4gQXJ0aWZhY3QiIGRlc2NyaXB0aW9uPSJPcGVuIGEgcGx1Zy1pbiBhcnRpZmFjdCBpbiB0aGUgbWFuaWZlc3QgZWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIiBkZXNjcmlwdGlvbj0iRGVidWcgc2VydmVyIiBjYXRlZ29yeT0iX0FIQlVMeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ0Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUubmV4dFN1YlRhYiIgY29tbWFuZE5hbWU9Ik5leHQgU3ViLVRhYiIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgbmV4dCBzdWItdGFiIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ0U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmludHJvZHVjZS5wYXJhbWV0ZXIiIGNvbW1hbmROYW1lPSJJbnRyb2R1Y2UgUGFyYW1ldGVyIiBkZXNjcmlwdGlvbj0iSW50cm9kdWNlIGEgbmV3IG1ldGhvZCBwYXJhbWV0ZXIgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGV4cHJlc3Npb24iIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLmFkZFRhc2tSZXBvc2l0b3J5IiBjb21tYW5kTmFtZT0iQWRkIFRhc2sgUmVwb3NpdG9yeS4uLiIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0NHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImNvbm5lY3RvcktpbmQiIG5hbWU9IlJlcG9zaXRvcnkgVHlwZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLnJlbW92ZUFsbFNlc3Npb25zIiBjb21tYW5kTmFtZT0iUmVtb3ZlIEFsbCBTZXNzaW9ucyIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0NVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sb2NhbEphdmFTaG9ydGN1dC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gSmF2YSBBcHBsaWNhdGlvbiIgZGVzY3JpcHRpb249IlJ1biBKYXZhIEFwcGxpY2F0aW9uIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5hZGRUYXNrIiBjb21tYW5kTmFtZT0iQWRkIFRhc2suLi4iIGRlc2NyaXB0aW9uPSJBZGQgYSB0YXNrIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ1eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVwZGF0ZVVuaXRWZXJzaW9ucyIgY29tbWFuZE5hbWU9IlVwZGF0ZSBJVSBWZXJzaW9ucyBmcm9tIFJlcG9zaXRvcmllcyIgZGVzY3JpcHRpb249IlVwZGF0ZSB0byBsYXRlc3QgSVUgdmVyc2lvbnMiIGNhdGVnb3J5PSJfQUhCVVBpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0cnVjdHVyZS5zZWxlY3QuZW5jbG9zaW5nIiBjb21tYW5kTmFtZT0iU2VsZWN0IEVuY2xvc2luZyBFbGVtZW50IiBkZXNjcmlwdGlvbj0iRXhwYW5kIHNlbGVjdGlvbiB0byBpbmNsdWRlIGVuY2xvc2luZyBlbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ2U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQiIGNvbW1hbmROYW1lPSJSZW5hbWUgV1NETCBjb21wb25lbnQiIGRlc2NyaXB0aW9uPSJSZW5hbWVzIFdTREwgY29tcG9uZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ2aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMub3BlbkNoZWF0U2hlZXQiIGNvbW1hbmROYW1lPSJPcGVuIENoZWF0IFNoZWV0IiBkZXNjcmlwdGlvbj0iT3BlbiBhIENoZWF0IFNoZWV0LiIgY2F0ZWdvcnk9Il9BSEJVVVN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF0Nnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImNoZWF0U2hlZXRJZCIgbmFtZT0iSWRlbnRpZmllciIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS52aWV3U291cmNlLmNvbW1hbmQiIGNvbW1hbmROYW1lPSJWaWV3IFVuZm9ybWF0dGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQubW92ZUxpbmVEb3duIiBjb21tYW5kTmFtZT0iTW92ZSBMaW5lcyBEb3duIiBkZXNjcmlwdGlvbj0iTW92ZXMgdGhlIHNlbGVjdGVkIGxpbmVzIGRvd24iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5Tb3VyY2VWaWV3IiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBEZWNsYXJhdGlvbiIgZGVzY3JpcHRpb249IlNob3cgdGhlIERlY2xhcmF0aW9uIHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVpLnNkay51cGRhdGUiIGNvbW1hbmROYW1lPSJDaGVjayBmb3IgVXBkYXRlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0OEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5zZWFyY2hUYXJnZXRSZXBvc2l0b3JpZXMiIGNvbW1hbmROYW1lPSJBZGQgQXJ0aWZhY3QgdG8gVGFyZ2V0IFBsYXRmb3JtIiBkZXNjcmlwdGlvbj0iQWRkIGFuIGFydGlmYWN0IHRvIHlvdXIgdGFyZ2V0IHBsYXRmb3JtIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXQ4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLnNlYXJjaFRhcmdldFJlcG9zaXRvcmllcy50ZXJtIiBuYW1lPSJUaGUgaW5pdGlhbCBzZWFyY2ggcGF0dGVybiBmb3IgdGhlIGFydGlmYWN0IHNlYXJjaCBkaWFsb2ciLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8udGV4dEVuZCIgY29tbWFuZE5hbWU9IlRleHQgRW5kIiBkZXNjcmlwdGlvbj0iR28gdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0OHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5nb3RvLm1hdGNoaW5nLmJyYWNrZXQiIGNvbW1hbmROYW1lPSJHbyB0byBNYXRjaGluZyBCcmFja2V0IiBkZXNjcmlwdGlvbj0iTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbWF0Y2hpbmcgYnJhY2tldCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0OUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnBhcnQucHJldmlvdXNQYWdlIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgUGFnZSIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgcHJldmlvdXMgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0OVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLm92ZXJyaWRlLm1ldGhvZHMiIGNvbW1hbmROYW1lPSJPdmVycmlkZS9JbXBsZW1lbnQgRnVuY3Rpb25zIiBkZXNjcmlwdGlvbj0iT3ZlcnJpZGUgb3IgaW1wbGVtZW50IGZ1bmN0aW9ucyBmcm9tIHN1cGVyIHR5cGVzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQ5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5jbG9zZVByb2plY3QiIGNvbW1hbmROYW1lPSJDbG9zZSBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iQ2xvc2UgdGhlIHNlbGVjdGVkIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdDl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUHVsbFdpdGhPcHRpb25zIiBjb21tYW5kTmFtZT0iUHVsbC4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0LUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnJlZmFjdG9yLm1pZ3JhdGUuamFyIiBjb21tYW5kTmFtZT0iTWlncmF0ZSBKQVIgRmlsZSIgZGVzY3JpcHRpb249Ik1pZ3JhdGUgYSBKQVIgRmlsZSB0byBhIG5ldyB2ZXJzaW9uIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXQtU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5lZGl0b3IiIGNvbW1hbmROYW1lPSJPcGVuIERlY2xhcmF0aW9uIiBkZXNjcmlwdGlvbj0iT3BlbiBhbiBlZGl0b3Igb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdC1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnB1Ymxpc2giIGNvbW1hbmROYW1lPSJQdWJsaXNoIiBkZXNjcmlwdGlvbj0iUHVibGlzaCB0byBzZXJ2ZXIiIGNhdGVnb3J5PSJfQUhCVUx5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdC15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuaW50cm9kdWNlLmZhY3RvcnkiIGNvbW1hbmROYW1lPSJJbnRyb2R1Y2UgRmFjdG9yeSIgZGVzY3JpcHRpb249IkludHJvZHVjZSBhIGZhY3RvcnkgbWV0aG9kIHRvIGVuY2Fwc3VsYXRlIGludm9jYXRpb24gb2YgdGhlIHNlbGVjdGVkIGNvbnN0cnVjdG9yIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXRfQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLnVwZGF0ZUNsYXNzcGF0aCIgY29tbWFuZE5hbWU9IlVwZGF0ZSBDbGFzc3BhdGgiIGRlc2NyaXB0aW9uPSJVcGRhdGVzIHRoZSBwbHVnLWluIGNsYXNzcGF0aCBmcm9tIGxhdGVzdCBzZXR0aW5ncyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0X1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LkNoZXJyeVBpY2siIGNvbW1hbmROYW1lPSJDaGVycnkgUGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF0X2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS51c2Uuc3VwZXJ0eXBlIiBjb21tYW5kTmFtZT0iVXNlIFN1cGVydHlwZSBXaGVyZSBQb3NzaWJsZSIgZGVzY3JpcHRpb249IkNoYW5nZSBvY2N1cnJlbmNlcyBvZiBhIHR5cGUgdG8gdXNlIGEgc3VwZXJ0eXBlIGluc3RlYWQiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdF95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm1hcmtUYXNrVW5yZWFkIiBjb21tYW5kTmFtZT0iTWFyayBUYXNrIFVucmVhZCIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1QUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS5wZXJmb3JtVGV4dFNlYXJjaEZpbGUiIGNvbW1hbmROYW1lPSJGaW5kIFRleHQgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaGVzIHRoZSBmaWxlcyBpbiB0aGUgZmlsZSBmb3Igc3BlY2lmaWMgdGV4dC4iIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0cnVjdHVyZS5zZWxlY3QubGFzdCIgY29tbWFuZE5hbWU9IlJlc3RvcmUgTGFzdCBTZWxlY3Rpb24iIGRlc2NyaXB0aW9uPSJSZXN0b3JlIGxhc3Qgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc29ydC5tZW1iZXJzIiBjb21tYW5kTmFtZT0iU29ydCBNZW1iZXJzIiBkZXNjcmlwdGlvbj0iU29ydCBhbGwgbWVtYmVycyB1c2luZyB0aGUgbWVtYmVyIG9yZGVyIHByZWZlcmVuY2UiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY3V0LmxpbmUiIGNvbW1hbmROYW1lPSJDdXQgTGluZSIgZGVzY3JpcHRpb249IkN1dCBhIGxpbmUgb2YgdGV4dCwgb3IgbXVsdGlwbGUgbGluZXMgd2hlbiBpbnZva2VkIGFnYWluIHdpdGhvdXQgaW50ZXJydXB0aW9uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVCQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5jb21tYW5kLmxhdW5jaCIgY29tbWFuZE5hbWU9Ik9wZW4gVGVybWluYWwgb24gU2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVTeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVCU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmZvbGRpbmcuZXhwYW5kX2FsbCIgY29tbWFuZE5hbWU9IkV4cGFuZCBBbGwiIGRlc2NyaXB0aW9uPSJFeHBhbmRzIGFsbCBmb2xkZWQgcmVnaW9ucyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Qml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmNvbW1hbmRzLnNob3dFbGVtZW50SW5QYWNrYWdlVmlldyIgY29tbWFuZE5hbWU9IlNob3cgSmF2YVNjcmlwdCBFbGVtZW50IGluIFNjcmlwdCBFeHBsb3JlciIgZGVzY3JpcHRpb249IlNlbGVjdCBKYXZhU2NyaXB0IGVsZW1lbnQgaW4gdGhlIFNjcmlwdCBFeHBsb3JlciB2aWV3IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVCeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudFJlZiIgbmFtZT0iSmF2YVNjcmlwdCBlbGVtZW50IHJlZmVyZW5jZSIgdHlwZUlkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb21tYW5kcy5qYXZhRWxlbWVudFJlZmVyZW5jZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Q0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkucmVmYWN0b3IubWFrZUVsZW1lbnRHbG9iYWwiIGNvbW1hbmROYW1lPSJNYWtlIExvY2FsIEVsZW1lbnQgJmFtcDtHbG9iYWwiIGRlc2NyaXB0aW9uPSJQcm9tb3RlcyBsb2NhbCBlbGVtZW50IHRvIGdsb2JhbCBsZXZlbCBhbmQgcmVwbGFjZXMgaXRzIHJlZmVyZW5jZXMiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5lbmNhcHN1bGF0ZUZpZWxkLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIENyZWF0ZSBnZXR0ZXIvc2V0dGVyIGZvciBmaWVsZCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdDcmVhdGUgZ2V0dGVyL3NldHRlciBmb3IgZmllbGQnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVDaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguc2V0dXAuZWRpdG9yLm9wZW5FZGl0b3JEcm9wZG93biIgY29tbWFuZE5hbWU9Ik9wZW4gU2V0dXAgRWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaGVscC5xdWlja1N0YXJ0QWN0aW9uIiBjb21tYW5kTmFtZT0iV2VsY29tZSIgZGVzY3JpcHRpb249IlNob3cgaGVscCBmb3IgYmVnaW5uaW5nIHVzZXJzIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVEQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLlJlcGxhY2VXaXRoUHJldmlvdXMiIGNvbW1hbmROYW1lPSJSZXBsYWNlIHdpdGggUHJldmlvdXMgUmV2aXNpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdURTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5tMmUuc291cmNlbG9va3VwLnVpLm9wZW5Qb20iIGNvbW1hbmROYW1lPSJPcGVuIFBvbSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1RGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm9vbXBoLnNldHVwLnVpLnF1ZXN0aW9ubmFpcmUiIGNvbW1hbmROYW1lPSJDb25maWd1cmF0aW9uIFF1ZXN0aW9ubmFpcmUiIGRlc2NyaXB0aW9uPSJSZXZpZXcgdGhlIElERSdzIG1vc3QgZmllcmNlbHkgY29udGVzdGVkIHByZWZlcmVuY2VzIiBjYXRlZ29yeT0iX0FIQlVSeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVEeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmhpZGVTaG93RWRpdG9ycyIgY29tbWFuZE5hbWU9IlRvZ2dsZSBTaGFyZWQgQXJlYSBWaXNpYmlsaXR5IiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2hhcmVkIGFyZWEiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZm9sZGluZy5yZXN0b3JlIiBjb21tYW5kTmFtZT0iUmVzZXQgU3RydWN0dXJlIiBkZXNjcmlwdGlvbj0iUmVzZXRzIHRoZSBmb2xkaW5nIHN0cnVjdHVyZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1RVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuaW5kZXhjb21tYW5kIiBjb21tYW5kTmFtZT0iSW5kZXgiIGRlc2NyaXB0aW9uPSJTaG93IEtleXdvcmQgSW5kZXgiIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuY2xlYW4udXAiIGNvbW1hbmROYW1lPSJDbGVhbiBVcCIgZGVzY3JpcHRpb249IlNvbHZlIHByb2JsZW1zIGFuZCBpbXByb3ZlIGNvZGUgc3R5bGUgb24gc2VsZWN0ZWQgcmVzb3VyY2VzIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVFeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5Hb3RvTWF0Y2hpbmdUb2tlbkFjdGlvbiIgY29tbWFuZE5hbWU9IkdvdG8gTWF0Y2hpbmcgVG9rZW4iIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnVpLnNldHVwLnByb2plY3RzIiBjb21tYW5kTmFtZT0iQVBJICZhbXA7VG9vbHMgU2V0dXAuLi4iIGRlc2NyaXB0aW9uPSJDb25maWd1cmUgcHJvamVjdHMgZm9yIEFQSSB1c2FnZSBhbmQgY29tcGF0aWJpbGl0eSBjaGVja3MiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5jcmVhdGUuZGVsZWdhdGUubWV0aG9kcyIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIERlbGVnYXRlIEZ1bmN0aW9ucyIgZGVzY3JpcHRpb249IkFkZCBkZWxlZ2F0ZSBmdW5jdGlvbnMgZm9yIGEgdHlwZSdzIHZhcnMiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkubG9jYWxKYXZhU2hvcnRjdXQuZGVidWciIGNvbW1hbmROYW1lPSJEZWJ1ZyBKYXZhIEFwcGxpY2F0aW9uIiBkZXNjcmlwdGlvbj0iRGVidWcgSmF2YSBBcHBsaWNhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Rnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLmZvcndhcmQiIGNvbW1hbmROYW1lPSJGb3J3YXJkIiBkZXNjcmlwdGlvbj0iTmF2aWdhdGUgZm9yd2FyZCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1R0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5jb21tYW5kcy5vcGVuYnVpbGRzY3JpcHQiIGNvbW1hbmROYW1lPSJPcGVuIEdyYWRsZSBCdWlsZCBTY3JpcHQiIGRlc2NyaXB0aW9uPSJPcGVucyB0aGUgR3JhZGxlIGJ1aWxkIHNjcmlwdCBmb3IgdGhlIHNlbGVjdGVkIEdyYWRsZSBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVHU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS5lY2xpcHNlbGluay51aS5jb252ZXJ0SmF2YUNvbnZlcnRlcnMiIGNvbW1hbmROYW1lPSJNb3ZlIEphdmEgQ29udmVydGVycyB0byBYTUwuLi4iIGNhdGVnb3J5PSJfQUhCVU9peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWxlY3QubGFzdCIgY29tbWFuZE5hbWU9IlJlc3RvcmUgTGFzdCBTZWxlY3Rpb24iIGRlc2NyaXB0aW9uPSJSZXN0b3JlIGxhc3Qgc2VsZWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYnVpbGRzaGlwLnVpLmNvbW1hbmRzLm9wZW5ydW5jb25maWd1cmF0aW9uIiBjb21tYW5kTmFtZT0iT3BlbiBHcmFkbGUgUnVuIENvbmZpZ3VyYXRpb24iIGRlc2NyaXB0aW9uPSJPcGVucyB0aGUgUnVuIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3RlZCBHcmFkbGUgdGFza3MiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuRGVsZXRlVGFnIiBjb21tYW5kTmFtZT0iJmFtcDtEZWxldGUgVGFnIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVIU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5yZW1vdmUub2NjdXJyZW5jZS5hbm5vdGF0aW9ucyIgY29tbWFuZE5hbWU9IlJlbW92ZSBPY2N1cnJlbmNlIEFubm90YXRpb25zIiBkZXNjcmlwdGlvbj0iUmVtb3ZlcyB0aGUgb2NjdXJyZW5jZSBhbm5vdGF0aW9ucyBmcm9tIHRoZSBjdXJyZW50IGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1SGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmNmdC5zZXJ2ZXIudWkuaW50ZXJuYWwuYWN0aW9ucy51bm1hcHByb2plY3Rjb21tYW5kIiBjb21tYW5kTmFtZT0iVW5saW5rIFByb2plY3QiIGRlc2NyaXB0aW9uPSJVbmxpbmsgdGhlIGNsb3VkIGFwcGxpY2F0aW9uIGFuZCB0aGUgcHJvamVjdC4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucGluRWRpdG9yIiBjb21tYW5kTmFtZT0iUGluIEVkaXRvciIgZGVzY3JpcHRpb249IlBpbiB0aGUgY3VycmVudCBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zaG93LmluLnBhY2thZ2UudmlldyIgY29tbWFuZE5hbWU9IlNob3cgaW4gU2NyaXB0IEV4cGxvcmVyIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgU2NyaXB0IEV4cGxvcmVyIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVJU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ucGFnZVVwIiBjb21tYW5kTmFtZT0iUGFnZSBVcCIgZGVzY3JpcHRpb249IkdvIHVwIG9uZSBwYWdlIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVJaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLnN1Ym1vZHVsZS5zeW5jIiBjb21tYW5kTmFtZT0iU3luYyBTdWJtb2R1bGUiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uRGVsZXRlQnJhbmNoIiBjb21tYW5kTmFtZT0iRGVsZXRlIEJyYW5jaCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1SkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLmNvcHkiIGNvbW1hbmROYW1lPSJDb3B5IiBjYXRlZ29yeT0iX0FIQlVVeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVKU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8uY29sdW1uUHJldmlvdXMiIGNvbW1hbmROYW1lPSJQcmV2aW91cyBDb2x1bW4iIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgcHJldmlvdXMgY29sdW1uIiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVKaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5zZWxlY3ROZXh0Q2hhbmdlIiBjb21tYW5kTmFtZT0iU2VsZWN0IE5leHQgQ2hhbmdlIiBkZXNjcmlwdGlvbj0iU2VsZWN0IE5leHQgQ2hhbmdlIiBjYXRlZ29yeT0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVKeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuY29ycmVjdGlvbi5zcGxpdEpvaW5WYXJpYWJsZURlY2xhcmF0aW9uLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIFNwbGl0L0pvaW4gdmFyaWFibGUgZGVjbGFyYXRpb24iIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnU3BsaXQvSm9pbiB2YXJpYWJsZSBkZWNsYXJhdGlvbiciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUtDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFzc2lnblBhcmFtVG9GaWVsZC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBBc3NpZ24gcGFyYW1ldGVyIHRvIHZhciIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBc3NpZ24gcGFyYW1ldGVyIHRvIHZhciciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUtTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcuY29tbWFuZHMucmVuYW1lUmVzb3VyY2UiIGNvbW1hbmROYW1lPSJSZW5hbWUgUmVzb3VyY2UiIGRlc2NyaXB0aW9uPSJSZW5hbWUgdGhlIHNlbGVjdGVkIHJlc291cmNlIGFuZCBub3RpZnkgTFRLIHBhcnRpY2lwYW50cy4iIGNhdGVnb3J5PSJfQUhCVVdDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUtpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuaW1wb3J0RnJvbVJlcG9zaXRvcnkiIGNvbW1hbmROYW1lPSJJbXBvcnQgUGx1Zy1pbiBmcm9tIGEgUmVwb3NpdG9yeSIgZGVzY3JpcHRpb249IkltcG9ydHMgYSBwbHVnLWluIGZyb20gYSBzb3VyY2UgcmVwb3NpdG9yeSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1S3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5SZWJhc2UiIGNvbW1hbmROYW1lPSJSZWJhc2Ugb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUxDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5TaG93SW5IaXN0b3J5IiBjb21tYW5kTmFtZT0iU2hvdyBpbiBIaXN0b3J5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5wcmV2aW91c1Rhc2siIGNvbW1hbmROYW1lPSJQcmV2aW91cyBUYXNrIENvbW1hbmQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdUxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnByb3BlcnRpZXMiIGNvbW1hbmROYW1lPSJQcm9wZXJ0aWVzIiBkZXNjcmlwdGlvbj0iRGlzcGxheSB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgaXRlbSIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1THl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmNvcHkucXVhbGlmaWVkLm5hbWUiIGNvbW1hbmROYW1lPSJDb3B5IFF1YWxpZmllZCBOYW1lIiBkZXNjcmlwdGlvbj0iQ29weSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVNQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY2Z0LnNlcnZlci51aS5pbnRlcm5hbC5hY3Rpb25zLnVwZGF0ZXJlc3RhcnRtb2R1bGVjb21tYW5kIiBjb21tYW5kTmFtZT0iVXBkYXRlIGFuZCBSZXN0YXJ0IiBkZXNjcmlwdGlvbj0iPVVwZGF0ZSBhbmQgUmVzdGFydCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1TVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5SZXBsYWNlV2l0aEhlYWQiIGNvbW1hbmROYW1lPSJSZXBsYWNlIHdpdGggSEVBRCByZXZpc2lvbiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1TWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLnJlbmFtZUluRmlsZS5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBSZW5hbWUgaW4gZmlsZSIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdSZW5hbWUgaW4gZmlsZSciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdU15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmNvbW1hbmRzLm9wZW5QcmVmZXJlbmNlcyIgY29tbWFuZE5hbWU9Ik9wZW4gdGhlIHByZWZlcmVuY2VzIGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1TkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy51dGlscy5yY3AubGlua0NvbnRyaWJ1dGlvbi5ocmVmIiBuYW1lPSJVUkkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdU5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2gucmVmZXJlbmNlcy5pbi5oaWVyYXJjaHkiIGNvbW1hbmROYW1lPSJSZWZlcmVuY2VzIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVmZXJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgaGllcmFyY2h5IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVOaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuYWN0aXZlQ29udGV4dEluZm8iIGNvbW1hbmROYW1lPSJTaG93IGFjdGl2ZUNvbnRleHQgSW5mbyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Tnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmNvbW1hbmQubWFya1Rhc2tSZWFkR29Ub1ByZXZpb3VzVW5yZWFkIiBjb21tYW5kTmFtZT0iTWFyayBUYXNrIFJlYWQgYW5kIEdvIFRvIFByZXZpb3VzIFVucmVhZCBUYXNrIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVPQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5jYWxsLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9Ik9wZW4gQ2FsbCBIaWVyYXJjaHkiIGRlc2NyaXB0aW9uPSJPcGVuIGEgY2FsbCBoaWVyYXJjaHkgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdU9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuZXh0cmFjdC5jb25zdGFudCIgY29tbWFuZE5hbWU9IkV4dHJhY3QgQ29uc3RhbnQiIGRlc2NyaXB0aW9uPSJFeHRyYWN0cyBhIGNvbnN0YW50IGludG8gYSBuZXcgc3RhdGljIGZpZWxkIGFuZCB1c2VzIHRoZSBuZXcgc3RhdGljIGZpZWxkIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVPaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNlbGVjdC50ZXh0U3RhcnQiIGNvbW1hbmROYW1lPSJTZWxlY3QgVGV4dCBTdGFydCIgZGVzY3JpcHRpb249IlNlbGVjdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVPeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5jbGVhbnVwLmRvY3VtZW50IiBjb21tYW5kTmFtZT0iQ2xlYW51cCBEb2N1bWVudC4uLiIgZGVzY3JpcHRpb249IkNsZWFudXAgZG9jdW1lbnQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29uZmlndXJlUHVzaCIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBVcHN0cmVhbSBQdXNoIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZC5uZXh0cGFnZSIgY29tbWFuZE5hbWU9Ik5leHQgUGFnZSBvZiBNZW1vcnkiIGRlc2NyaXB0aW9uPSJMb2FkIG5leHQgcGFnZSBvZiBtZW1vcnkiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kLmdvdG9hZGRyZXNzIiBjb21tYW5kTmFtZT0iR28gdG8gQWRkcmVzcyIgZGVzY3JpcHRpb249IkdvIHRvIEFkZHJlc3MiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cubWF4aW1pemVQYXJ0IiBjb21tYW5kTmFtZT0iTWF4aW1pemUgQWN0aXZlIFZpZXcgb3IgRWRpdG9yIiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyBtYXhpbWl6ZS9yZXN0b3JlIHN0YXRlIG9mIGFjdGl2ZSB2aWV3IG9yIGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1UUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLnF1YWxpZnlGaWVsZCIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIFF1YWxpZnkgZmllbGQgYWNjZXNzIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ1F1YWxpZnkgZmllbGQgYWNjZXNzJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1UVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5uZXdFZGl0b3IiIGNvbW1hbmROYW1lPSJDbG9uZSBFZGl0b3IiIGRlc2NyaXB0aW9uPSJPcGVuIGFub3RoZXIgZWRpdG9yIG9uIHRoZSBhY3RpdmUgZWRpdG9yJ3MgaW5wdXQiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVFpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmZvcm1hdCIgY29tbWFuZE5hbWU9IkZvcm1hdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1UXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnNlYXJjaC51aS5vcGVuU2VhcmNoRGlhbG9nIiBjb21tYW5kTmFtZT0iT3BlbiBTZWFyY2ggRGlhbG9nIiBkZXNjcmlwdGlvbj0iT3BlbiB0aGUgU2VhcmNoIGRpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1UkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5jb250ZW50QXNzaXN0LnByb3Bvc2FscyIgY29tbWFuZE5hbWU9IkNvbnRlbnQgQXNzaXN0IiBkZXNjcmlwdGlvbj0iQ29udGVudCBBc3Npc3QiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5leHRlcm5hbGl6ZS5zdHJpbmdzIiBjb21tYW5kTmFtZT0iRXh0ZXJuYWxpemUgU3RyaW5ncyIgZGVzY3JpcHRpb249IkZpbmRzIGFsbCBzdHJpbmdzIHRoYXQgYXJlIG5vdCBleHRlcm5hbGl6ZWQgYW5kIG1vdmVzIHRoZW0gaW50byBhIHNlcGFyYXRlIHByb3BlcnR5IGZpbGUiIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS51cCIgY29tbWFuZE5hbWU9IlVwIiBkZXNjcmlwdGlvbj0iTmF2aWdhdGUgdXAgb25lIGxldmVsIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVSeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LmFjdGl2YXRlRWRpdG9yIiBjb21tYW5kTmFtZT0iQWN0aXZhdGUgRWRpdG9yIiBkZXNjcmlwdGlvbj0iQWN0aXZhdGUgdGhlIGVkaXRvciIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1U0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmNvbW1hbmQuYWRkUGx1Z2luIiBjb21tYW5kTmFtZT0iQWRkIE1hdmVuIFBsdWdpbiIgZGVzY3JpcHRpb249IkFkZCBNYXZlbiBQbHVnaW4iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJzZWQudGFibGV0cmVlLmV4cGFuZEFsbCIgY29tbWFuZE5hbWU9IkV4cGFuZCBBbGwiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEubW9kaWZ5Lm1ldGhvZC5wYXJhbWV0ZXJzIiBjb21tYW5kTmFtZT0iQ2hhbmdlIE1ldGhvZCBTaWduYXR1cmUiIGRlc2NyaXB0aW9uPSJDaGFuZ2UgbWV0aG9kIHNpZ25hdHVyZSBpbmNsdWRlcyBwYXJhbWV0ZXIgbmFtZXMgYW5kIHBhcmFtZXRlciBvcmRlciIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1U3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5kZWxldGUubGluZS50by5lbmQiIGNvbW1hbmROYW1lPSJEZWxldGUgdG8gRW5kIG9mIExpbmUiIGRlc2NyaXB0aW9uPSJEZWxldGUgdG8gdGhlIGVuZCBvZiBhIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LkNyZWF0ZUJyYW5jaCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBCcmFuY2guLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLm1lcmdlU2Vzc2lvbnMiIGNvbW1hbmROYW1lPSJNZXJnZSBTZXNzaW9ucyIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmV4dHJhY3RMb2NhbC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBFeHRyYWN0IGxvY2FsIHZhcmlhYmxlIChyZXBsYWNlIGFsbCBvY2N1cnJlbmNlcykiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnRXh0cmFjdCBsb2NhbCB2YXJpYWJsZSAocmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMpJyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlRlcm1pbmF0ZSIgY29tbWFuZE5hbWU9IlRlcm1pbmF0ZSIgZGVzY3JpcHRpb249IlRlcm1pbmF0ZSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1VUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5TaG93UmVwb3NpdG9yaWVzVmlldyIgY29tbWFuZE5hbWU9IlNob3cgR2l0IFJlcG9zaXRvcmllcyBWaWV3IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVVU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuaGVscC51aS5pZ25vcmVNaXNzaW5nUGxhY2Vob2xkZXJzIiBjb21tYW5kTmFtZT0iRG8gbm90IHdhcm4gb2YgbWlzc2luZyBkb2N1bWVudGF0aW9uIiBkZXNjcmlwdGlvbj0iU2V0cyB0aGUgaGVscCBwcmVmZXJlbmNlcyB0byBubyBsb25nZXIgcmVwb3J0IGEgd2FybmluZyBhYm91dCB0aGUgY3VycmVudCBzZXQgb2YgbWlzc2luZyBkb2N1bWVudHMuIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5jb21wYXJlV2l0aE90aGVyIiBjb21tYW5kTmFtZT0iQ29tcGFyZSBXaXRoIE90aGVyIFJlc291cmNlIiBkZXNjcmlwdGlvbj0iQ29tcGFyZSByZXNvdXJjZXMsIGNsaXBib2FyZCBjb250ZW50cyBvciBlZGl0b3JzIiBjYXRlZ29yeT0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVVeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEub3Blbi5leHRlcm5hbC5qYXZhZG9jIiBjb21tYW5kTmFtZT0iT3BlbiBFeHRlcm5hbCBKU0RvYyIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIEpTRG9jIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGFuIGV4dGVybmFsIGJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jZnQuc2VydmVyLnVpLmNvbm5lY3Rjb21tYW5kIiBjb21tYW5kTmFtZT0iQ29ubmVjdCIgZGVzY3JpcHRpb249IkNvbm5lY3QgdG8gU2VydmVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVWU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkNyZWF0ZVBhdGNoIiBjb21tYW5kTmFtZT0iQ3JlYXRlIFBhdGNoIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVWaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy5yZXZpc2lvbnMuYXV0aG9yLnRvZ2dsZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBSZXZpc2lvbiBBdXRob3IgRGlzcGxheSIgZGVzY3JpcHRpb249IlRvZ2dsZXMgdGhlIGRpc3BsYXkgb2YgdGhlIHJldmlzaW9uIGF1dGhvciIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Vnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLndpbmRvd0VuZCIgY29tbWFuZE5hbWU9IldpbmRvdyBFbmQiIGRlc2NyaXB0aW9uPSJHbyB0byB0aGUgZW5kIG9mIHRoZSB3aW5kb3ciIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLmVjbGlwc2VsaW5rLnVpLnBlcnNpc3RlbnRUeXBlQWRkVmlydHVhbEF0dHJpYnV0ZSIgY29tbWFuZE5hbWU9IkFkZCBWaXJ0dWFsIEF0dHJpYnV0ZS4uLiIgY2F0ZWdvcnk9Il9BSEJVUEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1V1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLnBlcnNwZWN0aXZlcy5zaG93UGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJTaG93IFBlcnNwZWN0aXZlIiBkZXNjcmlwdGlvbj0iU2hvdyBhIHBhcnRpY3VsYXIgcGVyc3BlY3RpdmUiIGNhdGVnb3J5PSJfQUhCVVZ5eFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdVdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZXMuc2hvd1BlcnNwZWN0aXZlLnBlcnNwZWN0aXZlSWQiIG5hbWU9IlBhcmFtZXRlciIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVXeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzLnNob3dQZXJzcGVjdGl2ZS5uZXdXaW5kb3ciIG5hbWU9IkluIE5ldyBXaW5kb3ciLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVYQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS5lY2xpcHNlbGluay51aS5uZXdEeW5hbWljRW50aXR5IiBjb21tYW5kTmFtZT0iRWNsaXBzZUxpbmsgRHluYW1pYyBFbnRpdHkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZ290by5saW5lIiBjb21tYW5kTmFtZT0iR28gdG8gTGluZSIgZGVzY3JpcHRpb249IkdvIHRvIGEgc3BlY2lmaWVkIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1WGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMucXVpY2tkaWZmLnJldmVydCIgY29tbWFuZE5hbWU9IlJldmVydCBMaW5lcyIgZGVzY3JpcHRpb249IlJldmVydCB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGJsb2NrIG9yIGRlbGV0ZWQgbGluZXMiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guaW1wbGVtZW50Lm9jY3VycmVuY2VzIiBjb21tYW5kTmFtZT0iU2VhcmNoIEltcGxlbWVudCBPY2N1cnJlbmNlcyBpbiBGaWxlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciBpbXBsZW1lbnQgb2NjdXJyZW5jZXMgb2YgYSBzZWxlY3RlZCB0eXBlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVZQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFBcHBsZXRTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIEphdmEgQXBwbGV0IiBkZXNjcmlwdGlvbj0iRGVidWcgSmF2YSBBcHBsZXQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVlTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmdvdG9NYXRjaGluZ1RhZyIgY29tbWFuZE5hbWU9Ik1hdGNoaW5nIFRhZyIgZGVzY3JpcHRpb249IkdvIHRvIE1hdGNoaW5nIFRhZyIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1WWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QubGluZVVwIiBjb21tYW5kTmFtZT0iU2VsZWN0IExpbmUgVXAiIGRlc2NyaXB0aW9uPSJFeHRlbmQgdGhlIHNlbGVjdGlvbiB0byB0aGUgcHJldmlvdXMgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVZeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5zYXZlVG9EYXRhYmFzZUFjdGlvbiIgY29tbWFuZE5hbWU9IlNhdmUgdG8gRGF0YWJhc2UiIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uc3VibW9kdWxlLmFkZCIgY29tbWFuZE5hbWU9IkFkZCBTdWJtb2R1bGUiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuY3V0LmxpbmUudG8uZW5kIiBjb21tYW5kTmFtZT0iQ3V0IHRvIEVuZCBvZiBMaW5lIiBkZXNjcmlwdGlvbj0iQ3V0IHRvIHRoZSBlbmQgb2YgYSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5jb252ZXJ0QW5vbnltb3VzVG9Mb2NhbC5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBDb252ZXJ0IGFub255bW91cyB0byBsb2NhbCBjbGFzcyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdDb252ZXJ0IGFub255bW91cyB0byBsb2NhbCBjbGFzcyciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdVp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLmNvcHlMZWZ0VG9SaWdodCIgY29tbWFuZE5hbWU9IkNvcHkgZnJvbSBMZWZ0IHRvIFJpZ2h0IiBkZXNjcmlwdGlvbj0iQ29weSBDdXJyZW50IENoYW5nZSBmcm9tIExlZnQgdG8gUmlnaHQiIGNhdGVnb3J5PSJfQUhCVVRDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5wcm9qZWN0Lm9wZW5Qcm9qZWN0IiBjb21tYW5kTmFtZT0iT3BlbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iT3BlbiBhIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVVpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuU2hvd0JsYW1lIiBjb21tYW5kTmFtZT0iU2hvdyBSZXZpc2lvbiBJbmZvcm1hdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1YWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmFkZFN1cHByZXNzV2FybmluZ3MiIGNvbW1hbmROYW1lPSJRdWljayBGaXggLSBBZGQgQFN1cHByZXNzV2FybmluZ3MiIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGZpeCBhbmQgc2VsZWN0cyAnQWRkIEBTdXBwcmVzc1dhcm5pbmdzJyAiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLnBlcnNpc3RlbnRBdHRyaWJ1dGVBZGRUb1htbCIgY29tbWFuZE5hbWU9IkFkZCBBdHRyaWJ1dGUgdG8gWE1MIiBjYXRlZ29yeT0iX0FIQlVQQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXViQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGlwcy5pZGUuY29tbWFuZC50cmltLm9wZW4iIGNvbW1hbmROYW1lPSJUaXAgb2YgdGhlIERheSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1YlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnB1c2guZG93biIgY29tbWFuZE5hbWU9IlB1c2ggRG93biIgZGVzY3JpcHRpb249Ik1vdmUgbWVtYmVycyB0byBzdWJjbGFzc2VzIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXViaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC53cml0ZS5hY2Nlc3MuaW4ucHJvamVjdCIgY29tbWFuZE5hbWU9IldyaXRlIEFjY2VzcyBpbiBQcm9qZWN0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBlbmNsb3NpbmcgcHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Ynl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkuc2VsZWN0Q291bnRlcnMiIGNvbW1hbmROYW1lPSJTZWxlY3QgQ291bnRlcnMiIGNhdGVnb3J5PSJfQUhCVU1TeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdWNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJ0eXBlIiBuYW1lPSJ0eXBlIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVjU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkucHJvamVjdC5wcm9wZXJ0aWVzIiBjb21tYW5kTmFtZT0iUHJvcGVydGllcyIgZGVzY3JpcHRpb249IkRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIGl0ZW0ncyBwcm9qZWN0ICIgY2F0ZWdvcnk9Il9BSEJVVWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Y2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaGlzdG9yeS5Db21wYXJlVmVyc2lvbnNJblRyZWUiIGNvbW1hbmROYW1lPSJDb21wYXJlIGluIFRyZWUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLnBlcnNpc3RlbnRUeXBlTWFwQXMiIGNvbW1hbmROYW1lPSJNYXAgQXMiIGNhdGVnb3J5PSJfQUhCVVBDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdWRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJwZXJzaXN0ZW50VHlwZU1hcHBpbmdLZXkiIG5hbWU9Im1hcHBpbmcga2V5IiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVkU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXBwLnBhY2thZ2UuY29tbW9uLmNvbnRyaWJ1dGUiIGNvbW1hbmROYW1lPSJDb250cmlidXRlIiBkZXNjcmlwdGlvbj0iQ29udHJpYnV0ZSB0byB0aGUgZGV2ZWxvcG1lbnQgYW5kIHN1Y2Nlc3Mgb2YgdGhlIEVjbGlwc2UgSURFISIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1ZGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuRE1MRGlhbG9nU2VsZWN0aW9uQWN0aW9uIiBjb21tYW5kTmFtZT0iRWRpdCBpbiBTUUwgUXVlcnkgQnVpbGRlci4uLiIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1ZHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QuY29sdW1uUHJldmlvdXMiIGNvbW1hbmROYW1lPSJTZWxlY3QgUHJldmlvdXMgQ29sdW1uIiBkZXNjcmlwdGlvbj0iU2VsZWN0IHRoZSBwcmV2aW91cyBjb2x1bW4iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuZGJ3cy51aS5nZW5lcmF0ZURid3MiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBEYXRhYmFzZSBXZWIgU2VydmljZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuanVuaXRXb3JrYmVuY2hTaG9ydGN1dC5kZWJ1ZyIgY29tbWFuZE5hbWU9IkRlYnVnIEpVbml0IFBsdWctaW4gVGVzdCIgZGVzY3JpcHRpb249IkRlYnVnIEpVbml0IFBsdWctaW4gVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1ZWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmV4dHJhY3RMb2NhbE5vdFJlcGxhY2VPY2N1cnJlbmNlcy5hc3Npc3QiIGNvbW1hbmROYW1lPSJRdWljayBBc3Npc3QgLSBFeHRyYWN0IGxvY2FsIHZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0V4dHJhY3QgbG9jYWwgdmFyaWFibGUnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVleXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGVkaXRvci5hdHRhY2hQcm9maWxlQWN0aW9uIiBjb21tYW5kTmFtZT0iU2V0IENvbm5lY3Rpb24gSW5mb3JtYXRpb24iIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLlJlcG9zaXRvcmllc1RvZ2dsZUJyYW5jaEhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBCcmFuY2ggUmVwcmVzZW50YXRpb24iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcuY29tbWFuZHMuZGVsZXRlUmVzb3VyY2VzIiBjb21tYW5kTmFtZT0iRGVsZXRlIFJlc291cmNlcyIgZGVzY3JpcHRpb249IkRlbGV0ZSB0aGUgc2VsZWN0ZWQgcmVzb3VyY2VzIGFuZCBub3RpZnkgTFRLIHBhcnRpY2lwYW50cy4iIGNhdGVnb3J5PSJfQUhCVVdDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5maWxlLnByaW50IiBjb21tYW5kTmFtZT0iUHJpbnQiIGRlc2NyaXB0aW9uPSJQcmludCIgY2F0ZWdvcnk9Il9BSEJVTWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Znl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5jb21tYW5kcy5BbGxSZWZlcmVuY2VzIiBjb21tYW5kTmFtZT0iQWxsIFJlZmVyZW5jZXMiIGRlc2NyaXB0aW9uPSJJbnNwZWN0IGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuanVuaXRTaG9ydGN1dC5yZXJ1bkxhc3QiIGNvbW1hbmROYW1lPSJSZXJ1biBKVW5pdCBUZXN0IiBkZXNjcmlwdGlvbj0iUmVydW4gSlVuaXQgVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Z1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZm9ybWF0LmFjdGl2ZS5lbGVtZW50cyIgY29tbWFuZE5hbWU9IkZvcm1hdCBBY3RpdmUgRWxlbWVudHMiIGRlc2NyaXB0aW9uPSJGb3JtYXQgYWN0aXZlIGVsZW1lbnRzIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVnaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5jb21tYW5kcy5pbXBvcnQiIGNvbW1hbmROYW1lPSJJbXBvcnQgUHJvZmlsZXMgQ29tbWFuZCIgZGVzY3JpcHRpb249IkNvbW1hbmQgdG8gaW1wb3J0IGNvbm5lY3Rpb24gcHJvZmlsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc2hvd1J1bGVyQ29udGV4dE1lbnUiIGNvbW1hbmROYW1lPSJTaG93IFJ1bGVyIENvbnRleHQgTWVudSIgZGVzY3JpcHRpb249IlNob3cgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHJ1bGVyIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVoQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWZlcmVuY2VzLmluLndvcmtpbmcuc2V0IiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBXb3JraW5nIFNldCIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBhIHdvcmtpbmcgc2V0IiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVoU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC50YXNrLmNsZWFyT3V0Z29pbmciIGNvbW1hbmROYW1lPSJDbGVhciBPdXRnb2luZyBDaGFuZ2VzIiBjYXRlZ29yeT0iX0FIQlVMaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVoaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmZvbGRpbmcuY29sbGFwc2UiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSIgZGVzY3JpcHRpb249IkNvbGxhcHNlcyB0aGUgZm9sZGVkIHJlZ2lvbiBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcHAubXBjLnVpLmNvbW1hbmQuc2hvd0Zhdm9yaXRlcyIgY29tbWFuZE5hbWU9IkVjbGlwc2UgTWFya2V0cGxhY2UgRmF2b3JpdGVzIiBkZXNjcmlwdGlvbj0iT3BlbiBNYXJrZXRwbGFjZSBGYXZvcml0ZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuc21hcnRFbnRlckludmVyc2UiIGNvbW1hbmROYW1lPSJJbnNlcnQgTGluZSBBYm92ZSBDdXJyZW50IExpbmUiIGRlc2NyaXB0aW9uPSJBZGRzIGEgbmV3IGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1aVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLndpbmRvdy5zcHkiIGNvbW1hbmROYW1lPSJTaG93IENvbnRyaWJ1dGluZyBQbHVnLWluIiBkZXNjcmlwdGlvbj0iU2hvd3MgY29udHJpYnV0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLmhlbHBTZWFyY2giIGNvbW1hbmROYW1lPSJIZWxwIFNlYXJjaCIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIGhlbHAgc2VhcmNoIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVpeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmluZmVyLnR5cGUuYXJndW1lbnRzIiBjb21tYW5kTmFtZT0iSW5mZXIgR2VuZXJpYyBUeXBlIEFyZ3VtZW50cyIgZGVzY3JpcHRpb249IkluZmVyIHR5cGUgYXJndW1lbnRzIGZvciByZWZlcmVuY2VzIHRvIGdlbmVyaWMgY2xhc3NlcyBhbmQgcmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVqQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ubGluZURvd24iIGNvbW1hbmROYW1lPSJMaW5lIERvd24iIGRlc2NyaXB0aW9uPSJHbyBkb3duIG9uZSBsaW5lIG9mIHRleHQiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdC5DaGVja291dCIgY29tbWFuZE5hbWU9IkNoZWNrIE91dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1aml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm0yZS5hY3Rpb25zLkxpZmVDeWNsZUNsZWFuLnJ1biIgY29tbWFuZE5hbWU9IlJ1biBNYXZlbiBDbGVhbiIgZGVzY3JpcHRpb249IlJ1biBNYXZlbiBDbGVhbiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1anl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvTGFzdEVkaXRQb3NpdGlvbiIgY29tbWFuZE5hbWU9Ikxhc3QgRWRpdCBMb2NhdGlvbiIgZGVzY3JpcHRpb249Ikxhc3QgZWRpdCBsb2NhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1a0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5vcGVuLmh5cGVybGluayIgY29tbWFuZE5hbWU9Ik9wZW4gSHlwZXJsaW5rIiBkZXNjcmlwdGlvbj0iT3BlbnMgdGhlIGh5cGVybGluayBhdCB0aGUgY2FyZXQgbG9jYXRpb24gb3Igb3BlbnMgYSBjaG9vc2VyIGlmIG1vcmUgdGhhbiBvbmUgaHlwZXJsaW5rIGlzIGF2YWlsYWJsZSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1a1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LnVpLmNvbnZlcnRUb0VjbGlwc2VIZWxwQ29tbWFuZCIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIEVjbGlwc2UgSGVscCAoKi5odG1sIGFuZCAqLXRvYy54bWwpIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVraXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmV4Y2VwdGlvbi5vY2N1cnJlbmNlcyIgY29tbWFuZE5hbWU9IlNlYXJjaCBFeGNlcHRpb24gT2NjdXJyZW5jZXMgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgZXhjZXB0aW9uIG9jY3VycmVuY2VzIG9mIGEgc2VsZWN0ZWQgZXhjZXB0aW9uIHR5cGUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWt5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kLnByZXZwYWdlIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgUGFnZSBvZiBNZW1vcnkiIGRlc2NyaXB0aW9uPSJMb2FkIHByZXZpb3VzIHBhZ2Ugb2YgbWVtb3J5IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVsQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmRzLkZvcmNlUmV0dXJuIiBjb21tYW5kTmFtZT0iRm9yY2UgUmV0dXJuIiBkZXNjcmlwdGlvbj0iRm9yY2VzIHJldHVybiBmcm9tIG1ldGhvZCB3aXRoIHZhbHVlIG9mIHNlbGVjdGVkIGV4cHJlc3Npb24gIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVsU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLmNvbmZpZ3VyZUZpbHRlcnMiIGNvbW1hbmROYW1lPSJGaWx0ZXJzLi4uIiBkZXNjcmlwdGlvbj0iQ29uZmlndXJlIHRoZSBmaWx0ZXJzIHRvIGFwcGx5IHRvIHRoZSBtYXJrZXJzIHZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdWxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmltcG9ydFNlc3Npb24iIGNvbW1hbmROYW1lPSJJbXBvcnQgU2Vzc2lvbi4uLiIgY2F0ZWdvcnk9Il9BSEJVTVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1bHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRlLnByZXZpb3VzVGFiIiBjb21tYW5kTmFtZT0iUHJldmlvdXMgVGFiIiBkZXNjcmlwdGlvbj0iU3dpdGNoIHRvIHRoZSBwcmV2aW91cyB0YWIiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdW1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guZGVjbGFyYXRpb25zLmluLmhpZXJhcmNoeSIgY29tbWFuZE5hbWU9IkRlY2xhcmF0aW9uIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgZGVjbGFyYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIGl0cyBoaWVyYXJjaHkiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdW1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5kaWFsb2dzLm9wZW5NZXNzYWdlRGlhbG9nIiBjb21tYW5kTmFtZT0iT3BlbiBNZXNzYWdlIERpYWxvZyIgZGVzY3JpcHRpb249Ik9wZW4gYSBNZXNzYWdlIERpYWxvZyIgY2F0ZWdvcnk9Il9BSEJVTnl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1bWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InRpdGxlIiBuYW1lPSJUaXRsZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ibWVzc2FnZSIgbmFtZT0iTWVzc2FnZSIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVuQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iaW1hZ2VUeXBlIiBuYW1lPSJJbWFnZSBUeXBlIENvbnN0YW50IiB0eXBlSWQ9Im9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSW50ZWdlciIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXVuU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZGVmYXVsdEluZGV4IiBuYW1lPSJEZWZhdWx0IEJ1dHRvbiBJbmRleCIgdHlwZUlkPSJvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkludGVnZXIiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1bml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJ1dHRvbkxhYmVsMCIgbmFtZT0iRmlyc3QgQnV0dG9uIExhYmVsIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdW55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJidXR0b25MYWJlbDEiIG5hbWU9IlNlY29uZCBCdXR0b24gTGFiZWwiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1b0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImJ1dHRvbkxhYmVsMiIgbmFtZT0iVGhpcmQgQnV0dG9uIExhYmVsIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdW9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJidXR0b25MYWJlbDMiIG5hbWU9IkZvdXJ0aCBCdXR0b24gTGFiZWwiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1b2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImNhbmNlbFJldHVybnMiIG5hbWU9IlJldHVybiBWYWx1ZSBvbiBDYW5jZWwiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVveXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci5maW5kUmVmZXJlbmNlcyIgY29tbWFuZE5hbWU9IkZpbmQgUmVmZXJlbmNlcyIgZGVzY3JpcHRpb249IkZpbmQgb3RoZXIgY29kZSBpdGVtcyByZWZlcmVuY2luZyB0aGUgY3VycmVudCBzZWxlY3RlZCBpdGVtLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1cEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5nb3RvLmxpbmVFbmQiIGNvbW1hbmROYW1lPSJMaW5lIEVuZCIgZGVzY3JpcHRpb249IkdvIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgb2YgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1cFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWl0LkNyZWF0ZVRhZyIgY29tbWFuZE5hbWU9IkNyZWF0ZSBUYWcuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5leHRyYWN0Lm1ldGhvZCIgY29tbWFuZE5hbWU9IkV4dHJhY3QgRnVuY3Rpb24iIGRlc2NyaXB0aW9uPSJFeHRyYWN0IGEgc2V0IG9mIHN0YXRlbWVudHMgb3IgYW4gZXhwcmVzc2lvbiBpbnRvIGEgbmV3IGZ1bmN0aW9uIGFuZCB1c2UgdGhlIG5ldyBmdW5jdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUVN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1cHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuZ2VuZXJhdGVEREwiIGNvbW1hbmROYW1lPSJHZW5lcmF0ZSBUYWJsZXMgZnJvbSBFbnRpdGllcy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1cUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucmVmZXJlbmNlZEZpbGVFcnJvcnMiIGNvbW1hbmROYW1lPSJTaG93IERldGFpbHMuLi4iIGRlc2NyaXB0aW9uPSJTaG93IERldGFpbHMuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLnJ1bkFjdGlvbiIgY29tbWFuZE5hbWU9IlJ1biIgY2F0ZWdvcnk9Il9BSEJVVml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1cWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlJ1bkxhc3QiIGNvbW1hbmROYW1lPSJSdW4iIGRlc2NyaXB0aW9uPSJMYXVuY2ggaW4gcnVuIG1vZGUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXF5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5leHRlcm5hbFRvb2xzLmNvbW1hbmRzLk9wZW5FeHRlcm5hbFRvb2xzQ29uZmlndXJhdGlvbnMiIGNvbW1hbmROYW1lPSJFeHRlcm5hbCBUb29scy4uLiIgZGVzY3JpcHRpb249Ik9wZW4gZXh0ZXJuYWwgdG9vbHMgbGF1bmNoIGNvbmZpZ3VyYXRpb24gZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmNvbW1hbmQuT3BlbkZyb21DbGlwYm9hcmQiIGNvbW1hbmROYW1lPSJPcGVuIGZyb20gQ2xpcGJvYXJkIiBkZXNjcmlwdGlvbj0iT3BlbnMgYSBKYXZhIGVsZW1lbnQgb3IgYSBKYXZhIHN0YWNrIHRyYWNlIGZyb20gY2xpcGJvYXJkIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmludGVybmF0aW9uYWxpemUiIGNvbW1hbmROYW1lPSJJbnRlcm5hdGlvbmFsaXplIFBsdWctaW5zIiBkZXNjcmlwdGlvbj0iU2V0cyB1cCBpbnRlcm5hdGlvbmFsaXphdGlvbiBmb3IgYSBwbHVnLWluIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmRlbGV0ZVByZXZpb3VzIiBjb21tYW5kTmFtZT0iRGVsZXRlIFByZXZpb3VzIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQ29tcGFyZVdpdGhQcmV2aW91cyIgY29tbWFuZE5hbWU9IkNvbXBhcmUgd2l0aCBQcmV2aW91cyBSZXZpc2lvbiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1c0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zZWxlY3QuY29sdW1uTmV4dCIgY29tbWFuZE5hbWU9IlNlbGVjdCBOZXh0IENvbHVtbiIgZGVzY3JpcHRpb249IlNlbGVjdCB0aGUgbmV4dCBjb2x1bW4iIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlYWQuYWNjZXNzLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIFdvcmtzcGFjZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgcmVhZCByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWFyY2guaW1wbGVtZW50b3JzLmluLndvcmtzcGFjZSIgY29tbWFuZE5hbWU9IkltcGxlbWVudG9ycyBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGltcGxlbWVudG9ycyBvZiB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlIiBjYXRlZ29yeT0iX0FIQlVWQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuVGVybWluYXRlQW5kUmVsYXVuY2giIGNvbW1hbmROYW1lPSJUZXJtaW5hdGUgYW5kIFJlbGF1bmNoIiBkZXNjcmlwdGlvbj0iVGVybWluYXRlIGFuZCBSZWxhdW5jaCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1dEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhSGllcmFyY2h5UGVyc3BlY3RpdmUiIGNvbW1hbmROYW1lPSJKYXZhIFR5cGUgSGllcmFyY2h5IiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgSmF2YSBUeXBlIEhpZXJhcmNoeSBwZXJzcGVjdGl2ZSIgY2F0ZWdvcnk9Il9BSEJVVnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1dFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5kZWNsYXJhdGlvbnMuaW4ucHJvamVjdCIgY29tbWFuZE5hbWU9IkRlY2xhcmF0aW9uIGluIFByb2plY3QiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgZW5jbG9zaW5nIHByb2plY3QiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc3Vycm91bmQud2l0aC50cnkubXVsdGljYXRjaCIgY29tbWFuZE5hbWU9IlN1cnJvdW5kIHdpdGggdHJ5L211bHRpLWNhdGNoIEJsb2NrIiBkZXNjcmlwdGlvbj0iU3Vycm91bmQgdGhlIHNlbGVjdGVkIHRleHQgd2l0aCBhIHRyeS9tdWx0aS1jYXRjaCBibG9jayIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1dHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkudGVhbS5UYWciIGNvbW1hbmROYW1lPSJUYWciIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uTm9Bc3N1bWVVbmNoYW5nZWQiIGNvbW1hbmROYW1lPSJObyBBc3N1bWUgVW5jaGFuZ2VkIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV1U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YWRvY1ZpZXciIGNvbW1hbmROYW1lPSJEb2N1bWVudGF0aW9uIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgSmF2YVNjcmlwdCBEb2N1bWVudGF0aW9uIHZpZXciIGNhdGVnb3J5PSJfQUhCVVF5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXVpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb21tYW5kcy5SZW1vdmVBbGxCcmVha3BvaW50cyIgY29tbWFuZE5hbWU9IlJlbW92ZSBBbGwgQnJlYWtwb2ludHMiIGRlc2NyaXB0aW9uPSJSZW1vdmVzIGFsbCBicmVha3BvaW50cyIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1dXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMubmVzdGVkLmNoYW5nZVByb2plY3RQcmVzZW50YXRpb24iIGNvbW1hbmROYW1lPSJQJmFtcDtyb2plY3RzIFByZXNlbnRhdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF1dkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMubmVzdGVkLmVuYWJsZWQiIG5hbWU9IiZhbXA7SGllcmFyY2hpY2FsIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdXZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcy5yYWRpb1N0YXRlUGFyYW1ldGVyIiBuYW1lPSJOZXN0ZWQgUHJvamVjdCB2aWV3IC0gUmFkaW8gU3RhdGUiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cuc2hvd0tleUFzc2lzdCIgY29tbWFuZE5hbWU9IlNob3cgS2V5IEFzc2lzdCIgZGVzY3JpcHRpb249IlNob3cgdGhlIGtleSBhc3Npc3QgZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV2eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZ2VuZXJpY2VkaXRvci50b2dnbGVoaWdobGlnaHQiIGNvbW1hbmROYW1lPSJUb2dnbGUgSGlnaGxpZ2h0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV3Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmludHJvZHVjZS5wYXJhbWV0ZXIub2JqZWN0IiBjb21tYW5kTmFtZT0iSW50cm9kdWNlIFBhcmFtZXRlciBPYmplY3QiIGRlc2NyaXB0aW9uPSJJbnRyb2R1Y2UgYSBwYXJhbWV0ZXIgb2JqZWN0IHRvIGEgc2VsZWN0ZWQgbWV0aG9kIiBjYXRlZ29yeT0iX0FIQlVUeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV3U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZ2VmLnpvb21fb3V0IiBjb21tYW5kTmFtZT0iWm9vbSBPdXQiIGRlc2NyaXB0aW9uPSJab29tIE91dCIgY2F0ZWdvcnk9Il9BSEJVV1N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1d2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb21tYW5kcy5vcGVuRWxlbWVudEluRWRpdG9yIiBjb21tYW5kTmFtZT0iT3BlbiBKYXZhIEVsZW1lbnQiIGRlc2NyaXB0aW9uPSJPcGVuIGEgSmF2YSBlbGVtZW50IGluIGl0cyBlZGl0b3IiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdXd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJlbGVtZW50UmVmIiBuYW1lPSJKYXZhIGVsZW1lbnQgcmVmZXJlbmNlIiB0eXBlSWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb21tYW5kcy5qYXZhRWxlbWVudFJlZmVyZW5jZSIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnVuY29tbWVudCIgY29tbWFuZE5hbWU9IlVuY29tbWVudCIgZGVzY3JpcHRpb249IlVuY29tbWVudCB0aGUgc2VsZWN0ZWQgSmF2YVNjcmlwdCBjb21tZW50IGxpbmVzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnJlc3VsdC5yZW1vdmVJbnN0YW5jZSIgY29tbWFuZE5hbWU9IlJlbW92ZSBSZXN1bHQiIGNhdGVnb3J5PSJfQUhCVU5DeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXhpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uQWRkVG9JbmRleCIgY29tbWFuZE5hbWU9IkFkZCB0byBJbmRleCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmRpc2NvdmVyeS51aS5kaXNjb3ZlcnlXaXphcmRDb21tYW5kIiBjb21tYW5kTmFtZT0iRGlzY292ZXJ5IFdpemFyZCIgZGVzY3JpcHRpb249InNob3dzIHRoZSBjb25uZWN0b3IgZGlzY292ZXJ5IHdpemFyZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlYXJjaC5yZWFkLmFjY2Vzcy5pbi53b3JraW5nLnNldCIgY29tbWFuZE5hbWU9IlJlYWQgQWNjZXNzIGluIFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciByZWFkIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gYSB3b3JraW5nIHNldCIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkucGVyc2lzdGVudEF0dHJpYnV0ZUFkZFRvWG1sQW5kTWFwIiBjb21tYW5kTmFtZT0iQWRkIEF0dHJpYnV0ZSB0byBYTUwgYW5kIE1hcC4uLiIgY2F0ZWdvcnk9Il9BSEJVUEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5jb21tYW5kcy5yZWZyZXNodGFza3ZpZXciIGNvbW1hbmROYW1lPSJSZWZyZXNoIFZpZXcgKEdyYWRsZSBUYXNrcykiIGRlc2NyaXB0aW9uPSJSZWZyZXNoZXMgdGhlIEdyYWRsZSBUYXNrcyB2aWV3IiBjYXRlZ29yeT0iX0FIQlVReXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV5eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50b2dnbGUuY29tbWVudCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBDb21tZW50IiBkZXNjcmlwdGlvbj0iVG9nZ2xlIENvbW1lbnQiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLnRpcHNBbmRUcmlja3NBY3Rpb24iIGNvbW1hbmROYW1lPSJUaXBzIGFuZCBUcmlja3MiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSB0aXBzIGFuZCB0cmlja3MgaGVscCBwYWdlIiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXV6U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmZvcm1hdCIgY29tbWFuZE5hbWU9IkZvcm1hdCIgZGVzY3JpcHRpb249IkZvcm1hdCB0aGUgc2VsZWN0ZWQgdGV4dCIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1eml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5zbWFydEVudGVyIiBjb21tYW5kTmFtZT0iSW5zZXJ0IExpbmUgQmVsb3cgQ3VycmVudCBMaW5lIiBkZXNjcmlwdGlvbj0iQWRkcyBhIG5ldyBsaW5lIGJlbG93IHRoZSBjdXJyZW50IGxpbmUiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdXp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5zZWxlY3QucHJldmlvdXMiIGNvbW1hbmROYW1lPSJTZWxlY3QgUHJldmlvdXMgRWxlbWVudCIgZGVzY3JpcHRpb249IkV4cGFuZCBzZWxlY3Rpb24gdG8gaW5jbHVkZSBwcmV2aW91cyBzaWJsaW5nIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUwQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LmdvdG8ubGluZVN0YXJ0IiBjb21tYW5kTmFtZT0iTGluZSBTdGFydCIgZGVzY3JpcHRpb249IkdvIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUwU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguc2V0dXAuZWRpdG9yLnN5bmNocm9uaXplUHJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJTeW5jaHJvbml6ZSBQcmVmZXJlbmNlcyIgY2F0ZWdvcnk9Il9BSEJVUnl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuY21uZC5jb250ZW50bW9kZWwuc3ljaCIgY29tbWFuZE5hbWU9IlN5bmNoIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUweXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Q29uZmlndXJlQnJhbmNoIiBjb21tYW5kTmFtZT0iQ29uZmlndXJlIEJyYW5jaCIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlN1c3BlbmQiIGNvbW1hbmROYW1lPSJTdXNwZW5kIiBkZXNjcmlwdGlvbj0iU3VzcGVuZCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5oaXBwaWVDb21wbGV0aW9uIiBjb21tYW5kTmFtZT0iV29yZCBDb21wbGV0aW9uIiBkZXNjcmlwdGlvbj0iQ29udGV4dCBpbnNlbnNpdGl2ZSBjb21wbGV0aW9uIiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUxaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS5yZWZhY3Rvci5yZW5hbWVUYXJnZXROYW1lc3BhY2UiIGNvbW1hbmROYW1lPSJSZW5hbWUgVGFyZ2V0IE5hbWVzcGFjZSIgZGVzY3JpcHRpb249IkNoYW5nZXMgdGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYSIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5mb2xkaW5nLmNvbGxhcHNlQ29tbWVudHMiIGNvbW1hbmROYW1lPSJDb2xsYXBzZSBDb21tZW50cyIgZGVzY3JpcHRpb249IkNvbGxhcHNlIGFsbCBjb21tZW50cyIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRlYW0udWkuc3luY2hyb25pemVMYXN0IiBjb21tYW5kTmFtZT0iUmVwZWF0IGxhc3Qgc3luY2hyb25pemF0aW9uIiBkZXNjcmlwdGlvbj0iUmVwZWF0IHRoZSBsYXN0IHN5bmNocm9uaXphdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUWl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1MlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5nZW5lcmF0ZS5qYXZhZG9jIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgSmF2YWRvYyIgZGVzY3JpcHRpb249IkdlbmVyYXRlcyBKYXZhZG9jIGZvciBhIHNlbGVjdGFibGUgc2V0IG9mIEphdmEgcmVzb3VyY2VzIiBjYXRlZ29yeT0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUyaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5SZXBvc2l0b3JpZXNWaWV3Q29uZmlndXJlR2Vycml0UmVtb3RlIiBjb21tYW5kTmFtZT0iR2Vycml0IENvbmZpZ3VyYXRpb24uLi4iIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuU3RlcEludG9TZWxlY3Rpb24iIGNvbW1hbmROYW1lPSJTdGVwIEludG8gU2VsZWN0aW9uIiBkZXNjcmlwdGlvbj0iU3RlcCBpbnRvIHRoZSBjdXJyZW50IHNlbGVjdGVkIHN0YXRlbWVudCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1M0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5zaG9ydGN1dC50ZXN0LnJ1biIgY29tbWFuZE5hbWU9IlJ1biBHcmFkbGUgVGVzdCIgZGVzY3JpcHRpb249IlJ1biBHcmFkbGUgdGVzdCBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuY29uZmlndXJlQ29sdW1ucyIgY29tbWFuZE5hbWU9IkNvbmZpZ3VyZSBDb2x1bW5zLi4uIiBkZXNjcmlwdGlvbj0iQ29uZmlndXJlIHRoZSBjb2x1bW5zIGluIHRoZSBtYXJrZXJzIHZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUmVwbGFjZVdpdGhDb21taXQiIGNvbW1hbmROYW1lPSJSZXBsYWNlIHdpdGggY29tbWl0IiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LnBhZ2VkZXNpZ25lci5kZXNpZ24iIGNvbW1hbmROYW1lPSJHcmFwaGljYWwgRGVzaWduZXIiIGNhdGVnb3J5PSJfQUhCVVJDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC5xdWlja2FjY2VzcyIgY29tbWFuZE5hbWU9IlF1aWNrIEFjY2VzcyIgY2F0ZWdvcnk9Il9BSEJVVXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1NFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLkRlYnVnTGFzdCIgY29tbWFuZE5hbWU9IkRlYnVnIiBkZXNjcmlwdGlvbj0iTGF1bmNoIGluIGRlYnVnIG1vZGUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC51aS5jb252ZXJ0VG9IdG1sQ29tbWFuZCIgY29tbWFuZE5hbWU9IkdlbmVyYXRlIEhUTUwiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkub3Blbk1hbmlmZXN0IiBjb21tYW5kTmFtZT0iT3BlbiBNYW5pZmVzdCIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIHBsdWctaW4gbWFuaWZlc3QiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cucHJldmlvdXNWaWV3IiBjb21tYW5kTmFtZT0iUHJldmlvdXMgVmlldyIgZGVzY3JpcHRpb249IlN3aXRjaCB0byB0aGUgcHJldmlvdXMgdmlldyIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1NVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnNlbGYuZW5jYXBzdWxhdGUuZmllbGQiIGNvbW1hbmROYW1lPSJFbmNhcHN1bGF0ZSBWYXIiIGRlc2NyaXB0aW9uPSJDcmVhdGUgZ2V0dGluZyBhbmQgc2V0dGluZyBmdW5jdGlvbnMgZm9yIHRoZSB2YXIgYW5kIHVzZSBvbmx5IHRob3NlIHRvIGFjY2VzcyB0aGUgdmFyIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU1aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmdlbmVyYXRlLnRvc3RyaW5nIiBjb21tYW5kTmFtZT0iR2VuZXJhdGUgdG9TdHJpbmcoKSIgZGVzY3JpcHRpb249IkdlbmVyYXRlcyB0aGUgdG9TdHJpbmcoKSBtZXRob2QgZm9yIHRoZSB0eXBlIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU1eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNvbXBhcmVXaXRoSGVhZCIgY29tbWFuZE5hbWU9IkNvbXBhcmUgd2l0aCBIRUFEIFJldmlzaW9uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXU2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLm9yZ2FuaXplLmltcG9ydHMiIGNvbW1hbmROYW1lPSJPcmdhbml6ZSBJbXBvcnRzIiBkZXNjcmlwdGlvbj0iRXZhbHVhdGUgYWxsIHJlcXVpcmVkIGltcG9ydHMgYW5kIHJlcGxhY2UgdGhlIGN1cnJlbnQgaW1wb3J0cyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1NlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5tYXJrZXJzLmNvcHlEZXNjcmlwdGlvbiIgY29tbWFuZE5hbWU9IkNvcHkgRGVzY3JpcHRpb24gVG8gQ2xpcGJvYXJkIiBkZXNjcmlwdGlvbj0iQ29waWVzIG1hcmtlcnMgZGVzY3JpcHRpb24gZmllbGQgdG8gdGhlIGNsaXBib2FyZCIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1Nml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLkRyb3BUb0ZyYW1lIiBjb21tYW5kTmFtZT0iRHJvcCB0byBGcmFtZSIgZGVzY3JpcHRpb249IkRyb3AgdG8gRnJhbWUiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5wcm9tb3RlLmxvY2FsLnZhcmlhYmxlIiBjb21tYW5kTmFtZT0iQ29udmVydCBMb2NhbCBWYXJpYWJsZSB0byBWYXIiIGRlc2NyaXB0aW9uPSJDb252ZXJ0IGEgbG9jYWwgdmFyaWFibGUgdG8gYSB2YXIiIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnVpLmNvbXBhcmUudG8uYmFzZWxpbmUiIGNvbW1hbmROYW1lPSJBUEkgQmFzZWxpbmUuLi4iIGRlc2NyaXB0aW9uPSJBbGxvd3MgdG8gY29tcGFyZSB0aGUgc2VsZWN0ZWQgcmVzb3VyY2Ugd2l0aCB0aGUgY3VycmVudCBiYXNlbGluZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1N1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS51aS5pbWFnZWJyb3dzZXIuc2F2ZVRvV29ya3NwYWNlIiBjb21tYW5kTmFtZT0iU2F2ZSBJbWFnZSIgZGVzY3JpcHRpb249IlNhdmUgdGhlIHNlbGVjdGVkIGltYWdlIGludG8gYSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuY29tbWFuZHMuRGlzcGxheSIgY29tbWFuZE5hbWU9IkRpc3BsYXkiIGRlc2NyaXB0aW9uPSJEaXNwbGF5IHJlc3VsdCBvZiBldmFsdWF0aW5nIHNlbGVjdGVkIHRleHQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLmV4Y2VwdGlvbi5vY2N1cnJlbmNlcyIgY29tbWFuZE5hbWU9IlNlYXJjaCBFeGNlcHRpb24gT2NjdXJyZW5jZXMgaW4gRmlsZSIgZGVzY3JpcHRpb249IlNlYXJjaCBmb3IgZXhjZXB0aW9uIG9jY3VycmVuY2VzIG9mIGEgc2VsZWN0ZWQgZXhjZXB0aW9uIHR5cGUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdThDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS50bS50ZXJtaW5hbC52aWV3LnVpLmNvbW1hbmQuZGlzY29ubmVjdCIgY29tbWFuZE5hbWU9IkRpc2Nvbm5lY3QgVGVybWluYWwiIGNhdGVnb3J5PSJfQUhCVVN5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdThTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uU2hvd0JsYW1lIiBjb21tYW5kTmFtZT0iU2hvdyBSZXZpc2lvbiBJbmZvcm1hdGlvbiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1OGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmFzc2lnblRvRmllbGQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIHRvIGZpZWxkIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0Fzc2lnbiB0byBmaWVsZCciIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuZm9sZGluZy5leHBhbmQiIGNvbW1hbmROYW1lPSJFeHBhbmQiIGRlc2NyaXB0aW9uPSJFeHBhbmRzIHRoZSBmb2xkZWQgcmVnaW9uIGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1OUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5lZGl0LnRleHQuamF2YS5leHRyYWN0Lm1ldGhvZCIgY29tbWFuZE5hbWU9IkV4dHJhY3QgTWV0aG9kIiBkZXNjcmlwdGlvbj0iRXh0cmFjdCBhIHNldCBvZiBzdGF0ZW1lbnRzIG9yIGFuIGV4cHJlc3Npb24gaW50byBhIG5ldyBtZXRob2QgYW5kIHVzZSB0aGUgbmV3IG1ldGhvZCIgY2F0ZWdvcnk9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1OVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEuZWNsaXBzZWxpbmsudWkubmV3RWNsaXBzZUxpbmtNYXBwaW5nRmlsZSIgY29tbWFuZE5hbWU9IkVjbGlwc2VMaW5rIE9STSBNYXBwaW5nIEZpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdTlpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kLm9wZW5SZW1vdGVUYXNrIiBjb21tYW5kTmFtZT0iT3BlbiBSZW1vdGUgVGFzayIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1OXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLm5leHRNZW1vcnlCbG9jayIgY29tbWFuZE5hbWU9Ik5leHQgTWVtb3J5IE1vbml0b3IiIGRlc2NyaXB0aW9uPSJTaG93IHJlbmRlcmluZ3MgZnJvbSBuZXh0IG1lbW9yeSBtb25pdG9yLiIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1LUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuaW50ZXJuYWwucmVmbG9nLk9wZW5JbkNvbW1pdFZpZXdlckNvbW1hbmQiIGNvbW1hbmROYW1lPSJPcGVuIGluIENvbW1pdCBWaWV3ZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdS1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmNvbW1hbmRzLnRhc2sucmV0cmlldmVDb250ZXh0IiBjb21tYW5kTmFtZT0iUmV0cmlldmUgQ29udGV4dCIgY2F0ZWdvcnk9Il9BSEJVTEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1LWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkucmVmYWN0b3IucmVuYW1lIiBjb21tYW5kTmFtZT0iUmVuYW1lIiBkZXNjcmlwdGlvbj0iUmVuYW1lIGEgSmF2YSBFbGVtZW50IiBjYXRlZ29yeT0iX0FIQlVLQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXUteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS50ZWFtLkZldGNoIiBjb21tYW5kTmFtZT0iRmV0Y2giIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdV9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkuanVuaXRXb3JrYmVuY2hTaG9ydGN1dC5ydW4iIGNvbW1hbmROYW1lPSJSdW4gSlVuaXQgUGx1Zy1pbiBUZXN0IiBkZXNjcmlwdGlvbj0iUnVuIEpVbml0IFBsdWctaW4gVGVzdCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF1X1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5uYXZpZ2F0ZS5nb3RvcGFja2FnZSIgY29tbWFuZE5hbWU9IkdvIHRvIFBhY2thZ2UiIGRlc2NyaXB0aW9uPSJHbyB0byBQYWNrYWdlIiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVfaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkud2luZG93LnRvZ2dsZXN0YXR1c2JhciIgY29tbWFuZE5hbWU9IlRvZ2dsZSBTdGF0dXNiYXIiIGRlc2NyaXB0aW9uPSJUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGJvdHRvbSBzdGF0dXMgYmFyIiBjYXRlZ29yeT0iX0FIQlVNeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXVfeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuY29tbWFuZHMuSW5zcGVjdCIgY29tbWFuZE5hbWU9Ikluc3BlY3QiIGRlc2NyaXB0aW9uPSJJbnNwZWN0IHJlc3VsdCBvZiBldmFsdWF0aW5nIHNlbGVjdGVkIHRleHQiIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrLnVpLmVkaXRvci5RdWlja091dGxpbmUiIGNvbW1hbmROYW1lPSJRdWljayBPdXRsaW5lIiBkZXNjcmlwdGlvbj0iU2hvdyB0aGUgcXVpY2sgb3V0bGluZSBmb3IgdGhlIGVkaXRvciBpbnB1dCIgY2F0ZWdvcnk9Il9BSEJVTGl4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2QVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5jb21tYW5kcy5hZGRidWlsZHNoaXBuYXR1cmUiIGNvbW1hbmROYW1lPSJBZGQgR3JhZGxlIE5hdHVyZSIgZGVzY3JpcHRpb249IkFkZHMgdGhlIEdyYWRsZSBuYXR1cmUgYW5kIHN5bmNocm9uaXplcyB0aGlzIHByb2plY3QgYXMgaWYgdGhlIEdyYWRsZSBJbXBvcnQgd2l6YXJkIGhhZCBiZWVuIHJ1biBvbiBpdHMgbG9jYXRpb24uIiBjYXRlZ29yeT0iX0FIQlVLaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZBaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuZW9mIiBjb21tYW5kTmFtZT0iRU9GIiBkZXNjcmlwdGlvbj0iU2VuZCBlbmQgb2YgZmlsZSIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2QXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5wYWdlZGVzaWduZXIuaG9yaXpvdGFsIiBjb21tYW5kTmFtZT0iSG9yaXpvbnRhbCBMYXlvdXQiIGNhdGVnb3J5PSJfQUhCVVJDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLkFib3J0UmViYXNlIiBjb21tYW5kTmFtZT0iQWJvcnQgUmViYXNlIiBjYXRlZ29yeT0iX0FIQlVWU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZCU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUuc2hvd0luUXVpY2tNZW51IiBjb21tYW5kTmFtZT0iU2hvdyBJbi4uLiIgZGVzY3JpcHRpb249Ik9wZW4gdGhlIFNob3cgSW4gbWVudSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Qml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5jb3B5TGluZVVwIiBjb21tYW5kTmFtZT0iRHVwbGljYXRlIExpbmVzIiBkZXNjcmlwdGlvbj0iRHVwbGljYXRlcyB0aGUgc2VsZWN0ZWQgbGluZXMgYW5kIGxlYXZlcyB0aGUgc2VsZWN0aW9uIHVuY2hhbmdlZCIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Qnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmNvbW1hbmRzLlRvZ2dsZU1ldGhvZEJyZWFrcG9pbnQiIGNvbW1hbmROYW1lPSJUb2dnbGUgTWV0aG9kIEJyZWFrcG9pbnQiIGRlc2NyaXB0aW9uPSJDcmVhdGVzIG9yIHJlbW92ZXMgYSBtZXRob2QgYnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVTml4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Q0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5uYXZpZ2F0ZS5qYXZhLm9wZW4uc3RydWN0dXJlIiBjb21tYW5kTmFtZT0iT3BlbiBTdHJ1Y3R1cmUiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy5qcy5jb21tYW5kIiBjb21tYW5kTmFtZT0iQ2hyb21lIC8gQ2hyb21pdW0gRGVidWdnZXIiIGNhdGVnb3J5PSJfQUhCVU9TeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFzc2lnblRvTG9jYWwuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gQXNzaWduIHRvIGxvY2FsIHZhcmlhYmxlIiBkZXNjcmlwdGlvbj0iSW52b2tlcyBxdWljayBhc3Npc3QgYW5kIHNlbGVjdHMgJ0Fzc2lnbiB0byBsb2NhbCB2YXJpYWJsZSciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0ZS5uZXh0IiBjb21tYW5kTmFtZT0iTmV4dCIgZGVzY3JpcHRpb249Ik5hdmlnYXRlIHRvIHRoZSBuZXh0IGl0ZW0iIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmNvbW1hbmRzLm9wZW5IZWxwIiBjb21tYW5kTmFtZT0iT3BlbiBhIGhlbHAgcGFnZSByZXNvdXJjZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF2RFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy51dGlscy5yY3AubGlua0NvbnRyaWJ1dGlvbi5ocmVmIiBuYW1lPSJVUkkiIG9wdGlvbmFsPSJmYWxzZSIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkRpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy5idWdzLmNvbW1hbmRzLm5ld1Rhc2tGcm9tTWFya2VyIiBjb21tYW5kTmFtZT0iTmV3IFRhc2sgZnJvbSBNYXJrZXIuLi4iIGRlc2NyaXB0aW9uPSJSZXBvcnQgYXMgQnVnIGZyb20gTWFya2VyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZEeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkucmVmYWN0b3IuYXBwbHkucmVmYWN0b3Jpbmcuc2NyaXB0IiBjb21tYW5kTmFtZT0iQXBwbHkgU2NyaXB0IiBkZXNjcmlwdGlvbj0iUGVyZm9ybSByZWZhY3RvcmluZ3MgZnJvbSBhIHJlZmFjdG9yaW5nIHNjcmlwdCBvbiB0aGUgbG9jYWwgd29ya3NwYWNlIiBjYXRlZ29yeT0iX0FIQlVRU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZFQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci5ydW4iIGNvbW1hbmROYW1lPSJSdW4iIGRlc2NyaXB0aW9uPSJSdW4gc2VydmVyIiBjYXRlZ29yeT0iX0FIQlVMeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZFU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy5mb2N1cy52aWV3IiBjb21tYW5kTmFtZT0iRm9jdXMgVmlldyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF2RWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InZpZXdJZCIgbmFtZT0iVmlldyBJRCB0byBGb2N1cyIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2RXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVjbGVtbWEudWkudGVzdE5nU2hvcnRjdXQuY292ZXJhZ2UiIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSBUZXN0TkcgVGVzdCIgZGVzY3JpcHRpb249IkNvdmVyYWdlIFRlc3RORyBUZXN0IiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZGQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuU3RlcFJldHVybiIgY29tbWFuZE5hbWU9IlN0ZXAgUmV0dXJuIiBkZXNjcmlwdGlvbj0iU3RlcCByZXR1cm4iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5icm93c2VyLm9wZW5CdW5kbGVSZXNvdXJjZSIgY29tbWFuZE5hbWU9Ik9wZW4gUmVzb3VyY2UgaW4gQnJvd3NlciIgZGVzY3JpcHRpb249Ik9wZW5zIGEgYnVuZGxlIHJlc291cmNlIGluIHRoZSBkZWZhdWx0IHdlYiBicm93c2VyLiIgY2F0ZWdvcnk9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF2Rml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9InBsdWdpbiIgbmFtZT0iUGx1Z2luIi8+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdkZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJwYXRoIiBuYW1lPSJQYXRoIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2R0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpzdC5wYWdlZGVzaWduZXIuc291cmNlIiBjb21tYW5kTmFtZT0iU291cmNlIENvZGUiIGNhdGVnb3J5PSJfQUhCVVJDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLmFib3V0QWN0aW9uIiBjb21tYW5kTmFtZT0iQWJvdXQiIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBhYm91dCBkaWFsb2ciIGNhdGVnb3J5PSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkdpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQudWkuQ29udmVydFByb2plY3RUb0ZhY2V0ZWRGb3JtIiBjb21tYW5kTmFtZT0iQ29udmVydCB0byBGYWNldGVkIEZvcm0uLi4iIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuYW5ub3RhdGUuY2xhc3NGaWxlIiBjb21tYW5kTmFtZT0iQW5ub3RhdGUgQ2xhc3MgRmlsZSIgZGVzY3JpcHRpb249IkV4dGVybmFsbHkgYWRkIEFubm90YXRpb25zIHRvIGEgQ2xhc3MgRmlsZS4iIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jZnQuc2VydmVyLnVpLmludGVybmFsLmFjdGlvbnMub3BlbmhvbWVwYWdlY29tbWFuZCIgY29tbWFuZE5hbWU9Ik9wZW4gSG9tZSBQYWdlIiBkZXNjcmlwdGlvbj0iT3BlbiBIb21lIFBhZ2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uc3Rhc2guY3JlYXRlIiBjb21tYW5kTmFtZT0iU3Rhc2ggQ2hhbmdlcy4uLiIgY2F0ZWdvcnk9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2SGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLnJlcGxhY2UuaW52b2NhdGlvbnMiIGNvbW1hbmROYW1lPSJSZXBsYWNlIEludm9jYXRpb25zIiBkZXNjcmlwdGlvbj0iUmVwbGFjZSBpbnZvY2F0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgZnVuY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmhpc3RvcnkuQ2hlY2tvdXRDb21tYW5kIiBjb21tYW5kTmFtZT0iQ2hlY2sgT3V0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZJQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY29tbWFuZC5hY3RpdmF0ZVNlbGVjdGVkVGFzayIgY29tbWFuZE5hbWU9IkFjdGl2YXRlIFNlbGVjdGVkIFRhc2siIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdklTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLnJlZmVyZW5jZXMuaW4ud29ya3NwYWNlIiBjb21tYW5kTmFtZT0iUmVmZXJlbmNlcyBpbiBXb3Jrc3BhY2UiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnQgaW4gdGhlIHdvcmtzcGFjZSIgY2F0ZWdvcnk9Il9BSEJVVkN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2SWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZm9ybWF0LmRvY3VtZW50IiBjb21tYW5kTmFtZT0iRm9ybWF0IiBkZXNjcmlwdGlvbj0iRm9ybWF0IHNlbGVjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVS0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2SXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jb3JyZWN0aW9uLmFkZE5vbk5MUyIgY29tbWFuZE5hbWU9IlF1aWNrIEZpeCAtIEFkZCBub24tTkxTIHRhZyIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdBZGQgbm9uLU5MUyB0YWcnIiBjYXRlZ29yeT0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZKQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLndyaXRlLmFjY2Vzcy5pbi53b3Jrc3BhY2UiIGNvbW1hbmROYW1lPSJXcml0ZSBBY2Nlc3MgaW4gV29ya3NwYWNlIiBkZXNjcmlwdGlvbj0iU2VhcmNoIGZvciB3cml0ZSByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSB3b3Jrc3BhY2UiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLnRlYW0uUmVtb3ZlRnJvbUluZGV4IiBjb21tYW5kTmFtZT0iUmVtb3ZlIGZyb20gSW5kZXgiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmQiIGNvbW1hbmROYW1lPSJOZXciIGRlc2NyaXB0aW9uPSJPcGVuIHRoZSBOZXcgaXRlbSB3aXphcmQiIGNhdGVnb3J5PSJfQUhCVU1peFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdkp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJuZXdXaXphcmRJZCIgbmFtZT0iTmV3IFdpemFyZCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdktDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53aW5kb3cubmV3V2luZG93IiBjb21tYW5kTmFtZT0iTmV3IFdpbmRvdyIgZGVzY3JpcHRpb249Ik9wZW4gYW5vdGhlciB3aW5kb3ciIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdktTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEudW5jb21tZW50IiBjb21tYW5kTmFtZT0iVW5jb21tZW50IiBkZXNjcmlwdGlvbj0iVW5jb21tZW50IHRoZSBzZWxlY3RlZCBKYXZhIGNvbW1lbnQgbGluZXMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdktpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5pbXBvcnRlci5jb25maWd1cmVQcm9qZWN0IiBjb21tYW5kTmFtZT0iQ29uZmlndXJlIGFuZCBEZXRlY3QgTmVzdGVkIFByb2plY3RzLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZLeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aS5zZWxlY3RBY3RpdmVTZXNzaW9uIiBjb21tYW5kTmFtZT0iU2VsZWN0IEFjdGl2ZSBTZXNzaW9uLi4uIiBjYXRlZ29yeT0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZMQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5oaXN0b3J5LkNvbXBhcmVWZXJzaW9ucyIgY29tbWFuZE5hbWU9IkNvbXBhcmUgd2l0aCBlYWNoIG90aGVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZMU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi51aS5zZGsuaW5zdGFsbCIgY29tbWFuZE5hbWU9Ikluc3RhbGwgTmV3IFNvZnR3YXJlLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZMaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcy5pbnRlcmVzdC5kZWNyZW1lbnQiIGNvbW1hbmROYW1lPSJNYWtlIExlc3MgSW50ZXJlc3RpbmciIGRlc2NyaXB0aW9uPSJNYWtlIExlc3MgSW50ZXJlc3RpbmciIGNhdGVnb3J5PSJfQUhCVUxDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdkx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbE1lbnVEZWxlZ2F0ZVRvb2xiYXIiIGNvbW1hbmROYW1lPSJSdW4gTGFzdCBMYXVuY2hlZCBFeHRlcm5hbCBUb29sIiBkZXNjcmlwdGlvbj0iUnVucyB0aGUgbGFzdCBsYXVuY2hlZCBleHRlcm5hbCBUb29sIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZNQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWdpdC51aS5DaGVja291dENvbW1hbmQiIGNvbW1hbmROYW1lPSJDaGVjayBPdXQiIGNhdGVnb3J5PSJfQUhCVVZTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuZWRpdC50ZXh0LmphdmEuc2VhcmNoLm9jY3VycmVuY2VzLmluLmZpbGUiIGNvbW1hbmROYW1lPSJTZWFyY2ggQWxsIE9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJTZWFyY2ggZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiBpdHMgZGVjbGFyaW5nIGZpbGUiIGNhdGVnb3J5PSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQubW92ZUxpbmVVcCIgY29tbWFuZE5hbWU9Ik1vdmUgTGluZXMgVXAiIGRlc2NyaXB0aW9uPSJNb3ZlcyB0aGUgc2VsZWN0ZWQgbGluZXMgdXAiIGNhdGVnb3J5PSJfQUhCVUt5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVpLmRpc2NvdmVyeS5jb21tYW5kcy5TaG93QnVuZGxlQ2F0YWxvZyIgY29tbWFuZE5hbWU9IlNob3cgQnVuZGxlIENhdGFsb2ciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdk5DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnVpLmRpc2NvdmVyeS5jb21tYW5kcy5EaXJlY3RvcnlQYXJhbWV0ZXIiIG5hbWU9IkRpcmVjdG9yeSBVUkwiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF2TlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIudWkuZGlzY292ZXJ5LmNvbW1hbmRzLlRhZ3NQYXJhbWV0ZXIiIG5hbWU9IlRhZ3MiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZOaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmdvdG9CcmVhZGNydW1iIiBjb21tYW5kTmFtZT0iU2hvdyBJbiBCcmVhZGNydW1iIiBkZXNjcmlwdGlvbj0iU2hvd3MgdGhlIEphdmEgZWRpdG9yIGJyZWFkY3J1bWIgYW5kIHNldHMgdGhlIGtleWJvYXJkIGZvY3VzIGludG8gaXQiIGNhdGVnb3J5PSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk55eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5wZGUudWkucnVudGltZVdvcmtiZW5jaFNob3J0Y3V0LmRlYnVnIiBjb21tYW5kTmFtZT0iRGVidWcgRWNsaXBzZSBBcHBsaWNhdGlvbiIgZGVzY3JpcHRpb249IkRlYnVnIEVjbGlwc2UgQXBwbGljYXRpb24iIGNhdGVnb3J5PSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51c2Vyc3RvcmFnZS51aS5zaG93UHVsbERvd24iIGNvbW1hbmROYW1lPSJTaG93IFB1bGwgRG93biBNZW51IiBjYXRlZ29yeT0iX0FIQlVVU3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQXZPU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iaW50b29sYmFyIiBuYW1lPSJJbiBUb29sIEJhciIgb3B0aW9uYWw9ImZhbHNlIi8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2T2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkubWFrZVBlcnNpc3RlbnQiIGNvbW1hbmROYW1lPSJNYWtlIFBlcnNpc3RlbnQuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdk95eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLkV4ZWN1dGVTZWxlY3Rpb25BY3Rpb24iIGNvbW1hbmROYW1lPSJFeGVjdXRlIFNlbGVjdGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuamF4Yi51aS5jb21tYW5kLmNyZWF0ZVBhY2thZ2VJbmZvIiBjb21tYW5kTmFtZT0iQ3JlYXRlIHBhY2thZ2UtaW5mby5qYXZhIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZQU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmVkaXQudGV4dC5qYXZhLmV4dHJhY3QuY2xhc3MiIGNvbW1hbmROYW1lPSJFeHRyYWN0IENsYXNzLi4uIiBkZXNjcmlwdGlvbj0iRXh0cmFjdHMgZmllbGRzIGludG8gYSBuZXcgY2xhc3MiIGNhdGVnb3J5PSJfQUhCVVR5eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlBpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qZHQudWkuY29ycmVjdGlvbi5leHRyYWN0Q29uc3RhbnQuYXNzaXN0IiBjb21tYW5kTmFtZT0iUXVpY2sgQXNzaXN0IC0gRXh0cmFjdCBjb25zdGFudCIgZGVzY3JpcHRpb249Ikludm9rZXMgcXVpY2sgYXNzaXN0IGFuZCBzZWxlY3RzICdFeHRyYWN0IGNvbnN0YW50JyIgY2F0ZWdvcnk9Il9BSEJVV2l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5yY3AuY29tbWFuZHMuZXh0ZW5zaW9uRGlzY292ZXJ5IiBjb21tYW5kTmFtZT0iRGlzY292ZXIgTmV3IEV4dGVuc2lvbnMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhBdlFDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMudXRpbHMucmNwLmxpbmtDb250cmlidXRpb24uaHJlZiIgbmFtZT0iVVJJIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZRU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29tcGFyZS5jb3B5UmlnaHRUb0xlZnQiIGNvbW1hbmROYW1lPSJDb3B5IGZyb20gUmlnaHQgdG8gTGVmdCIgZGVzY3JpcHRpb249IkNvcHkgQ3VycmVudCBDaGFuZ2UgZnJvbSBSaWdodCB0byBMZWZ0IiBjYXRlZ29yeT0iX0FIQlVUQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZRaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29tbWFuZHMuT3BlblByb2ZpbGVDb25maWd1cmF0aW9ucyIgY29tbWFuZE5hbWU9IlByb2ZpbGUuLi4iIGRlc2NyaXB0aW9uPSJPcGVuIHByb2ZpbGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gZGlhbG9nIiBjYXRlZ29yeT0iX0FIQlVOaXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZReXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanB0LmpwYS51aS5uZXdNYXBwaW5nRmlsZSIgY29tbWFuZE5hbWU9IkpQQSBPUk0gTWFwcGluZyBGaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZSQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuaWRlLm1hcmtDb21wbGV0ZWQiIGNvbW1hbmROYW1lPSJNYXJrIENvbXBsZXRlZCIgZGVzY3JpcHRpb249Ik1hcmsgdGhlIHNlbGVjdGVkIHRhc2tzIGFzIGNvbXBsZXRlZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2UlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmVkaXQudGV4dC5qYXZhLmNvbW1lbnQiIGNvbW1hbmROYW1lPSJDb21tZW50IiBkZXNjcmlwdGlvbj0iVHVybiB0aGUgc2VsZWN0ZWQgbGluZXMgaW50byBKYXZhU2NyaXB0IGNvbW1lbnRzIiBjYXRlZ29yeT0iX0FIQlVMU3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZSaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnJlY2VudGVyIiBjb21tYW5kTmFtZT0iUmVjZW50ZXIiIGRlc2NyaXB0aW9uPSJTY3JvbGwgY3Vyc29yIGxpbmUgdG8gY2VudGVyLCB0b3AgYW5kIGJvdHRvbSIgY2F0ZWdvcnk9Il9BSEJVS3l4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Unl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkueG1sRmlsZVVwZ3JhZGVUb0xhdGVzdFZlcnNpb24iIGNvbW1hbmROYW1lPSJVcGdyYWRlIEpQQSBEb2N1bWVudCBWZXJzaW9uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZTQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC50ZXh0LnNjcm9sbC5saW5lRG93biIgY29tbWFuZE5hbWU9IlNjcm9sbCBMaW5lIERvd24iIGRlc2NyaXB0aW9uPSJTY3JvbGwgZG93biBvbmUgbGluZSBvZiB0ZXh0IiBjYXRlZ29yeT0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZTU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zZWFyY2guZmluZC5vY2N1cnJlbmNlcyIgY29tbWFuZE5hbWU9Ik9jY3VycmVuY2VzIGluIEZpbGUiIGRlc2NyaXB0aW9uPSJGaW5kIG9jY3VycmVuY2VzIG9mIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGZpbGUiIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5Ub2dnbGVDb29sYmFyQWN0aW9uIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE1haW4gVG9vbGJhciBWaXNpYmlsaXR5IiBkZXNjcmlwdGlvbj0iVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IHRvb2xiYXIiIGNhdGVnb3J5PSJfQUhCVU15eFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlN5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5uYXZpZ2F0ZS5vcGVuLnR5cGUuaW4uaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iT3BlbiBUeXBlIGluIEhpZXJhcmNoeSIgZGVzY3JpcHRpb249Ik9wZW4gYSB0eXBlIGluIHRoZSB0eXBlIGhpZXJhcmNoeSB2aWV3IiBjYXRlZ29yeT0iX0FIQlVTQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZUQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5vdXRsaW5lLmN1c3RvbUZpbHRlciIgY29tbWFuZE5hbWU9IiZhbXA7RmlsdGVycyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2VFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxzY3JhcGJvb2suY29tbWFuZHMub3BlbnNjcmFwYm9vayIgY29tbWFuZE5hbWU9Ik9wZW4gU1FMIFNjcmFwYm9vJmFtcDtrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZUaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdGUub3BlblJlc291cmNlIiBjb21tYW5kTmFtZT0iT3BlbiBSZXNvdXJjZSIgZGVzY3JpcHRpb249Ik9wZW4gYW4gZWRpdG9yIG9uIGEgcGFydGljdWxhciByZXNvdXJjZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEF2VHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImZpbGVQYXRoIiBuYW1lPSJGaWxlIFBhdGgiIHR5cGVJZD0ib3JnLmVjbGlwc2UudWkuaWRlLnJlc291cmNlUGF0aCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jb3JyZWN0aW9uLmFkZEJsb2NrLmFzc2lzdCIgY29tbWFuZE5hbWU9IlF1aWNrIEFzc2lzdCAtIFJlcGxhY2Ugc3RhdGVtZW50IHdpdGggYmxvY2siIGRlc2NyaXB0aW9uPSJJbnZva2VzIHF1aWNrIGFzc2lzdCBhbmQgc2VsZWN0cyAnUmVwbGFjZSBzdGF0ZW1lbnQgd2l0aCBibG9jayciIGNhdGVnb3J5PSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5lZGl0LnRleHQuamF2YS5nb3RvLnByZXZpb3VzLm1lbWJlciIgY29tbWFuZE5hbWU9IkdvIHRvIFByZXZpb3VzIE1lbWJlciIgZGVzY3JpcHRpb249Ik1vdmUgdGhlIGNhcmV0IHRvIHRoZSBwcmV2aW91cyBtZW1iZXIgb2YgdGhlIEphdmFTY3JpcHQgZmlsZSIgY2F0ZWdvcnk9Il9BSEJVU0N4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2VWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5hbnQudWkuYWN0aW9uU2V0LnByZXNlbnRhdGlvbi9vcmcuZWNsaXBzZS5hbnQudWkudG9nZ2xlQXV0b1JlY29uY2lsZSIgY29tbWFuZE5hbWU9IlRvZ2dsZSBBbnQgRWRpdG9yIEF1dG8gUmVjb25jaWxlIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIEFudCBFZGl0b3IgQXV0byBSZWNvbmNpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbHNjcmFwYm9vay5hY3Rpb25TZXQvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbHNjcmFwYm9vay5hY3Rpb25zLk9wZW5TY3JhcGJvb2tBY3Rpb24iIGNvbW1hbmROYW1lPSJPcGVuIFNRTCBTY3JhcGJvb2siIGRlc2NyaXB0aW9uPSJPcGVuIHNjcmFwYm9vayB0byBlZGl0IFNRTCBzdGF0ZW1lbnRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZWQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLlJ1bldpdGhDb25maWd1cmF0aW9uQWN0aW9uIiBjb21tYW5kTmFtZT0iUnVuIEFzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZWU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLlJ1bkhpc3RvcnlNZW51QWN0aW9uIiBjb21tYW5kTmFtZT0iUnVuIEhpc3RvcnkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmFjdGlvbnMuUnVuRHJvcERvd25BY3Rpb24iIGNvbW1hbmROYW1lPSJSdW4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmFjdGlvbnMuRGVidWdXaXRoQ29uZmlndXJhdGlvbkFjdGlvbiIgY29tbWFuZE5hbWU9IkRlYnVnIEFzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZXQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLkRlYnVnSGlzdG9yeU1lbnVBY3Rpb24iIGNvbW1hbmROYW1lPSJEZWJ1ZyBIaXN0b3J5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZXU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaEFjdGlvblNldC9vcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5hY3Rpb25zLkRlYnVnRHJvcERvd25BY3Rpb24iIGNvbW1hbmROYW1lPSJEZWJ1ZyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2V2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcm9maWxlQWN0aW9uU2V0L29yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmFjdGlvbnMuUHJvZmlsZURyb3BEb3duQWN0aW9uIiBjb21tYW5kTmFtZT0iUHJvZmlsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2V3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcm9maWxlQWN0aW9uU2V0L29yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmFjdGlvbnMuUHJvZmlsZVdpdGhDb25maWd1cmF0aW9uQWN0aW9uIiBjb21tYW5kTmFtZT0iUHJvZmlsZSBBcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5wcm9maWxlQWN0aW9uU2V0L29yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmFjdGlvbnMuUHJvZmlsZUhpc3RvcnlNZW51QWN0aW9uIiBjb21tYW5kTmFtZT0iUHJvZmlsZSBIaXN0b3J5IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZYU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVjbGVtbWEudWkuQ292ZXJhZ2VBY3Rpb25TZXQvb3JnLmVjbGlwc2UuZWNsZW1tYS51aS5hY3Rpb25zLkNvdmVyYWdlRHJvcERvd25BY3Rpb24iIGNvbW1hbmROYW1lPSJDb3ZlcmFnZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5lY2xlbW1hLnVpLkNvdmVyYWdlQWN0aW9uU2V0L29yZy5lY2xpcHNlLmVjbGVtbWEudWkuYWN0aW9ucy5Db3ZlcmFnZUFzQWN0aW9uIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UgQXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdlh5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZWNsZW1tYS51aS5Db3ZlcmFnZUFjdGlvblNldC9vcmcuZWNsaXBzZS5lY2xlbW1hLnVpLmFjdGlvbnMuQ292ZXJhZ2VIaXN0b3J5QWN0aW9uIiBjb21tYW5kTmFtZT0iQ292ZXJhZ2UgSGlzdG9yeSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldC9vcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5OZXdUeXBlRHJvcERvd24iIGNvbW1hbmROYW1lPSJDbGFzcy4uLiIgZGVzY3JpcHRpb249Ik5ldyBKYXZhIENsYXNzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZZU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC51aS5KYXZhRWxlbWVudENyZWF0aW9uQWN0aW9uU2V0L29yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5QYWNrYWdlV2l6YXJkIiBjb21tYW5kTmFtZT0iUGFja2FnZS4uLiIgZGVzY3JpcHRpb249Ik5ldyBKYXZhIFBhY2thZ2UiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdllpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LnVpLkphdmFFbGVtZW50Q3JlYXRpb25BY3Rpb25TZXQvb3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuT3BlblByb2plY3RXaXphcmQiIGNvbW1hbmROYW1lPSJKYXZhIFByb2plY3QuLi4iIGRlc2NyaXB0aW9uPSJOZXcgSmF2YSBQcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZZeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC51aS5TZWFyY2hBY3Rpb25TZXQvb3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuT3BlbkphdmFTZWFyY2hQYWdlIiBjb21tYW5kTmFtZT0iSmF2YS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2WkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qc3QuajJlZS5KMmVlTWFpbkFjdGlvblNldC9vcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5hY3Rpb25zLk5ld0phdmFFRUFydGlmYWN0IiBjb21tYW5kTmFtZT0iU2VydmxldCIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIG5ldyBTZXJ2bGV0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZaU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyZWVNYWluQWN0aW9uU2V0L29yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLmFjdGlvbnMuTmV3SmF2YUVFUHJvamVjdCIgY29tbWFuZE5hbWU9IkR5bmFtaWMgV2ViIFByb2plY3QiIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBEeW5hbWljIFdlYiBwcm9qZWN0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZaaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLmphdmEuYWN0aW9uU2V0LmJyb3dzaW5nL29yZy5lY2xpcHNlLm15bHluLmphdmEudWkuYWN0aW9ucy5BcHBseU15bHluVG9Ccm93c2luZ1BlcnNwZWN0aXZlQWN0aW9uIiBjb21tYW5kTmFtZT0iRm9jdXMgQnJvd3NpbmcgUGVyc3BlY3RpdmUiIGRlc2NyaXB0aW9uPSJGb2N1cyBKYXZhIEJyb3dzaW5nIFZpZXdzIG9uIEFjdGl2ZSBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZaeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLmRvYy5hY3Rpb25TZXQvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuYnVnLnJlcG9ydCIgY29tbWFuZE5hbWU9IlJlcG9ydCBCdWcgb3IgRW5oYW5jZW1lbnQuLi4iIGRlc2NyaXB0aW9uPSJSZXBvcnQgQnVnIG9yIEVuaGFuY2VtZW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZhQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRpb24uYWRkaXRpb25zL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLm5hdmlnYXRlLnRhc2suaGlzdG9yeSIgY29tbWFuZE5hbWU9IkFjdGl2YXRlIFByZXZpb3VzIFRhc2siIGRlc2NyaXB0aW9uPSJBY3RpdmF0ZSBQcmV2aW91cyBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZhU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLnBkZS51aS5TZWFyY2hBY3Rpb25TZXQvb3JnLmVjbGlwc2UucGRlLnVpLmFjdGlvbnMuT3BlblBsdWdpblNlYXJjaFBhZ2UiIGNvbW1hbmROYW1lPSJQbHVnLWluLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZhaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLmFjdGlvblNldC9vcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cy5hY3Rpb25zLkNoZWF0U2hlZXRIZWxwTWVudUFjdGlvbiIgY29tbWFuZE5hbWU9IkNoZWF0IFNoZWV0cy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2YXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5yc2UuY29yZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLnJzZS5jb3JlLnNlYXJjaC5zZWFyY2hBY3Rpb24iIGNvbW1hbmROYW1lPSJSZW1vdGUuLi4iIGRlc2NyaXB0aW9uPSJPcGVucyBSZW1vdGUgU2VhcmNoIGRpYWxvZyBwYWdlIGZvciB0ZXh0IGFuZCBmaWxlIHNlYXJjaGluZyBvbiByZW1vdGUgc3lzdGVtcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2YkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5zZWFyY2guc2VhcmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLnNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nUGFnZSIgY29tbWFuZE5hbWU9IlNlYXJjaC4uLiIgZGVzY3JpcHRpb249IlNlYXJjaCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2YlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS50ZWFtLnVpLmFjdGlvblNldC9vcmcuZWNsaXBzZS50ZWFtLnVpLnN5bmNocm9uaXplQWxsIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUuLi4iIGRlc2NyaXB0aW9uPSJTeW5jaHJvbml6ZS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Yml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS50ZWFtLnVpLmFjdGlvblNldC9vcmcuZWNsaXBzZS50ZWFtLnVpLkNvbmZpZ3VyZVByb2plY3QiIGNvbW1hbmROYW1lPSJTaGFyZSBQcm9qZWN0Li4uIiBkZXNjcmlwdGlvbj0iU2hhcmUgdGhlIHByb2plY3Qgd2l0aCBvdGhlcnMgdXNpbmcgYSB2ZXJzaW9uIGFuZCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgc3lzdGVtLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Ynl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbHNTZXQvb3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xNZW51RGVsZWdhdGVNZW51IiBjb21tYW5kTmFtZT0iRXh0ZXJuYWwgVG9vbHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuYWN0aW9uU2V0cy9vcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy51aS5hY3Rpb25zLkFkZEV4Y2VwdGlvbkJyZWFrcG9pbnRBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgVjgvQ2hyb21lIEphdmFTY3JpcHQgRXhjZXB0aW9uIEJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldC9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5hY3Rpb25zLk9wZW5GaWxlV2l6YXJkIiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBTb3VyY2UgRmlsZSIgZGVzY3JpcHRpb249Ik5ldyBKYXZhU2NyaXB0IGZpbGUiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YUVsZW1lbnRDcmVhdGlvbkFjdGlvblNldC9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5hY3Rpb25zLk9wZW5Qcm9qZWN0V2l6YXJkIiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdCBQcm9qZWN0Li4uIiBkZXNjcmlwdGlvbj0iTmV3IEphdmFTY3JpcHQgUHJvamVjdCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2Y3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnJlZmFjdG9yLnNob3cucmVmYWN0b3JpbmcuaGlzdG9yeSIgY29tbWFuZE5hbWU9Ikhpc3RvcnkuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuU2VhcmNoQWN0aW9uU2V0L29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmFjdGlvbnMuT3BlbkphdmFTZWFyY2hQYWdlIiBjb21tYW5kTmFtZT0iSmF2YVNjcmlwdC4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2ZFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLm5ldy5hY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5hY3Rpb24ubmV3LnNlcnZlciIgY29tbWFuZE5hbWU9IkNyZWF0ZSBTZXJ2ZXIiIGRlc2NyaXB0aW9uPSJDcmVhdGUgU2VydmVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZkaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwud2ViYnJvd3Nlci5hY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvbi5vcGVuIiBjb21tYW5kTmFtZT0iT3BlbiBXZWIgQnJvd3NlciIgZGVzY3JpcHRpb249Ik9wZW4gV2ViIEJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5pbnRlcm5hbC53ZWJicm93c2VyLmFjdGlvblNldC9vcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndlYmJyb3dzZXIuYWN0aW9uLnN3aXRjaCIgY29tbWFuZE5hbWU9IldlYiBCcm93c2VyIiBkZXNjcmlwdGlvbj0iV2ViIEJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhBdmVDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LndlYi51aS53aXphcmRzQWN0aW9uU2V0L29yZy5lY2xpcHNlLndzdC53ZWIudWkuYWN0aW9ucy5uZXdDU1NGaWxlIiBjb21tYW5kTmFtZT0iQ1NTIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgbmV3IENhc2NhZGluZyBTdHlsZSBTaGVldCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2ZVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3Qud2ViLnVpLndpemFyZHNBY3Rpb25TZXQvb3JnLmVjbGlwc2Uud3N0LndlYi51aS5hY3Rpb25zLm5ld0pTRmlsZSIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQiIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBuZXcgSmF2YVNjcmlwdCBmaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQXZlaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC53ZWIudWkud2l6YXJkc0FjdGlvblNldC9vcmcuZWNsaXBzZS53c3Qud2ViLnVpLmFjdGlvbnMubmV3SFRNTEZpbGUiIGNvbW1hbmROYW1lPSJIVE1MIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgbmV3IEhUTUwgcGFnZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEF2ZXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmFjdGlvbi5MYXVuY2hXU0VBY3Rpb24iIGNvbW1hbmROYW1lPSJMYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgZGVzY3JpcHRpb249IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRrQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmFudC51aS5CcmVha3BvaW50UnVsZXJBY3Rpb25zL29yZy5lY2xpcHNlLmFudC51aS5hY3Rpb25zLk1hbmFnZUJyZWFrcG9pbnRSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlRvZ2dsZSBCcmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRrU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5ydWxsZXJEb3VibGVDbGljay9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuYWN0aW9ucy5NYW5hZ2VCcmVha3BvaW50UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgQnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUa2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5lbWYuZXhwb3J0ZXIuZ2VuTW9kZWxFZGl0b3JDb250cmlidXRpb24vb3JnLmVjbGlwc2UuZW1mLmV4cG9ydGVyLnVpLkdlbk1vZGVsRXhwb3J0QWN0aW9uRGVsZWdhdGUuRWRpdG9yIiBjb21tYW5kTmFtZT0iRXhwb3J0IE1vZGVsLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRreXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5nZW5Nb2RlbEVkaXRvckNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIudWkuR2VuTW9kZWxSZWxvYWRBY3Rpb25EZWxlZ2F0ZS5FZGl0b3IiIGNvbW1hbmROYW1lPSJSZWxvYWQuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVGxDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUucHJlc2VudGF0aW9uLkVjb3JlMkVjb3JlQ29udHJpYnV0aW9uSUQvb3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuYWN0aW9uLlJlbW92ZU1hcHBpbmdBY3Rpb25JRCIgY29tbWFuZE5hbWU9IlJlbW92ZSBNYXBwaW5nIiBkZXNjcmlwdGlvbj0iUmVtb3ZlIHRoZSBtYXBwaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgb2JqZWN0cy4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVGxTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUucHJlc2VudGF0aW9uLkVjb3JlMkVjb3JlQ29udHJpYnV0aW9uSUQvb3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuYWN0aW9uLlR5cGVNYXRjaE1hcHBpbmdBY3Rpb25JRCIgY29tbWFuZE5hbWU9Ik1hdGNoIE1hcHBpbmcgYnkgVHlwZSIgZGVzY3JpcHRpb249IkNyZWF0ZSBjaGlsZCBtYXBwaW5ncyBhdXRvbWF0aWNhbGx5IGJ5IHR5cGUuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRsaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmVjb3JlMmVjb3JlLnByZXNlbnRhdGlvbi5FY29yZTJFY29yZUNvbnRyaWJ1dGlvbklEL29yZy5lY2xpcHNlLmVtZi5tYXBwaW5nLmFjdGlvbi5OYW1lTWF0Y2hNYXBwaW5nQWN0aW9uSUQiIGNvbW1hbmROYW1lPSJNYXRjaCBNYXBwaW5nIGJ5IE5hbWUiIGRlc2NyaXB0aW9uPSJDcmVhdGUgY2hpbGQgbWFwcGluZ3MgYXV0b21hdGljYWxseSBieSBuYW1lLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUbHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5lbWYubWFwcGluZy5lY29yZTJlY29yZS5wcmVzZW50YXRpb24uRWNvcmUyRWNvcmVDb250cmlidXRpb25JRC9vcmcuZWNsaXBzZS5lbWYubWFwcGluZy5hY3Rpb24uQ3JlYXRlT25lU2lkZWRNYXBwaW5nQWN0aW9uSUQiIGNvbW1hbmROYW1lPSJDcmVhdGUgT25lLXNpZGVkIE1hcHBpbmciIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBuZXcgbWFwcGluZyBmb3IgdGhlIHNlbGVjdGVkIG9iamVjdC4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUucHJlc2VudGF0aW9uLkVjb3JlMkVjb3JlQ29udHJpYnV0aW9uSUQvb3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuYWN0aW9uLkNyZWF0ZU1hcHBpbmdBY3Rpb25JRCIgY29tbWFuZE5hbWU9IkNyZWF0ZSBNYXBwaW5nIiBkZXNjcmlwdGlvbj0iQ3JlYXRlIGEgbmV3IG1hcHBpbmcgYmV0d2VlbiB0aGUgc2VsZWN0ZWQgb2JqZWN0cy4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG1TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUucHJlc2VudGF0aW9uLkVjb3JlMkVjb3JlQ29udHJpYnV0aW9uSUQvb3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUuYWN0aW9uLkFkZE91cHV0Um9vdEFjdGlvbklEIiBjb21tYW5kTmFtZT0iQWRkIE91dHB1dCBSb290Li4uIiBkZXNjcmlwdGlvbj0iQWRkIG5ldyBvdXRwdXQgcm9vdC4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUucHJlc2VudGF0aW9uLkVjb3JlMkVjb3JlQ29udHJpYnV0aW9uSUQvb3JnLmVjbGlwc2UuZW1mLm1hcHBpbmcuZWNvcmUyZWNvcmUuYWN0aW9uLkFkZElucHV0Um9vdEFjdGlvbklEIiBjb21tYW5kTmFtZT0iQWRkIElucHV0IFJvb3QuLi4iIGRlc2NyaXB0aW9uPSJBZGQgbmV3IGlucHV0IHJvb3QuIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRteXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy5Db21waWxhdGlvblVuaXRFZGl0b3IuQnJlYWtwb2ludFJ1bGVyQWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuYWN0aW9ucy5NYW5hZ2VCcmVha3BvaW50UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJUb2dnbGUgQnJlYWtwb2ludCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUbkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcuQ2xhc3NGaWxlRWRpdG9yLkJyZWFrcG9pbnRSdWxlckFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmFjdGlvbnMuTWFuYWdlQnJlYWtwb2ludFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iVG9nZ2xlIEJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG5TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkphdmFTbmlwcGV0VG9vbGJhckFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlNuaXBwZXRFeGVjdXRlIiBjb21tYW5kTmFtZT0iRXhlY3V0ZSIgZGVzY3JpcHRpb249IkV4ZWN1dGUgdGhlIFNlbGVjdGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG5peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkphdmFTbmlwcGV0VG9vbGJhckFjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlNuaXBwZXREaXNwbGF5IiBjb21tYW5kTmFtZT0iRGlzcGxheSIgZGVzY3JpcHRpb249IkRpc3BsYXkgUmVzdWx0IG9mIEV2YWx1YXRpbmcgU2VsZWN0ZWQgVGV4dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUbnl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuSmF2YVNuaXBwZXRUb29sYmFyQWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuU25pcHBldEluc3BlY3QiIGNvbW1hbmROYW1lPSJJbnNwZWN0IiBkZXNjcmlwdGlvbj0iSW5zcGVjdCBSZXN1bHQgb2YgRXZhbHVhdGluZyBTZWxlY3RlZCBUZXh0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRvQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iSmF2YSBFZGl0b3IgQm9va21hcmsgUnVsZXIgQWN0aW9uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRvU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhIEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVG9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkNsYXNzRmlsZUVkaXRvci5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkphdmFTZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmEgRWRpdG9yIFJ1bGVyIFNpbmdsZS1DbGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUb3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUHJvcGVydGllc0ZpbGVFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmEgRWRpdG9yIEJvb2ttYXJrIFJ1bGVyIEFjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUcEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUHJvcGVydGllc0ZpbGVFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJvcGVydGllc2ZpbGVlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhIEVkaXRvciBSdWxlciBTaW5nbGUtQ2xpY2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBCb29rbWFyay4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUcGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlNlbGVjdCBSdWxlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUcHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5tMmUuamR0LnVpLmRvd25sb2FkU291cmNlc0NvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5tMmUuamR0LnVpLmRvd25sb2FkU291cmNlc0FjdGlvbiIgY29tbWFuZE5hbWU9ImxhYmVsIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRxQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm0yZS5qZHQudWkuZG93bmxvYWRTb3VyY2VzQ29udHJpYnV0aW9uXzM4L29yZy5lY2xpcHNlLm0yZS5qZHQudWkuZG93bmxvYWRTb3VyY2VzQWN0aW9uXzM4IiBjb21tYW5kTmFtZT0ibGFiZWwiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlRleHQgRWRpdG9yIEJvb2ttYXJrIFJ1bGVyIEFjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUcWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlRleHQgRWRpdG9yIFJ1bGVyIFNpbmdsZS1DbGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUcXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iQWRkIEJvb2ttYXJrLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iU2VsZWN0IFJ1bGVyIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRyU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJBZGQgQm9va21hcmsuLi4iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmR0ZHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUnVsZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIiBjb21tYW5kTmFtZT0iQWRkIEJvb2ttYXJrLi4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRzQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUnVsZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuY2hyb21pdW0uZGVidWcudWkuZWRpdG9ycy5Kc0VkaXRvci5lZGl0b3JBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLnVpLmVkaXRvci5ydWxlci5kb3VibGVDbGlja0JyZWFrcG9pbnRBY3Rpb24iIGNvbW1hbmROYW1lPSJOb3QgVXNlZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUc2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS50b2dnbGVicmVha3BvaW50L29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLlJ1bGVyVG9nZ2xlQnJlYWtwb2ludCIgY29tbWFuZE5hbWU9IlRvZ2dsZSBCcmVha3BvaW50IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLnVpLkNvbXBpbGF0aW9uVW5pdEVkaXRvci5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLnVpLmphdmFlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgRWRpdG9yIEJvb2ttYXJrIFJ1bGVyIEFjdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5Db21waWxhdGlvblVuaXRFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkphdmFTZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgRWRpdG9yIFJ1bGVyIFNpbmdsZS1DbGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5DbGFzc0ZpbGVFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkphdmFTZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgRWRpdG9yIFJ1bGVyIFNpbmdsZS1DbGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5Qcm9wZXJ0aWVzRmlsZUVkaXRvci5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLnVpLnByb3BlcnRpZXNmaWxlZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJKYXZhU2NyaXB0IEVkaXRvciBCb29rbWFyayBSdWxlciBBY3Rpb24iIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHR5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuUHJvcGVydGllc0ZpbGVFZGl0b3IucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC51aS5wcm9wZXJ0aWVzZmlsZWVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkphdmFTY3JpcHQgRWRpdG9yIFJ1bGVyIFNpbmdsZS1DbGljayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QuanNvbi5jb3JlLmpzb25zb3VyY2UucnVsZXIuYWN0aW9ucy9vcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSIlQWRkQm9va21hcmsubGFiZWwiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0Lmpzb24uY29yZS5qc29uc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IiVTZWxlY3RSdWxlci5sYWJlbCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS51aS5hcnRpY2xlcy5hY3Rpb24uY29udHJpYnV0aW9uLmVkaXRvci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5hY3Rpb25zLlJlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlIiBjb21tYW5kTmFtZT0iUmVsb2FkIERlcGVuZGVuY2llcyIgZGVzY3JpcHRpb249IlJlbG9hZCBEZXBlbmRlbmNpZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHV5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBCb29rbWFyay4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdkN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlNlbGVjdCBSdWxlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sLnNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBCb29rbWFyay4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUdml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sLnNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iIGNvbW1hbmROYW1lPSJTZWxlY3QgUnVsZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnhzZHNvdXJjZS5ydWxlci5hY3Rpb25zL29yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBCb29rbWFyay4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUd0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUueHNkc291cmNlLnJ1bGVyLmFjdGlvbnMvb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIgY29tbWFuZE5hbWU9IlNlbGVjdCBSdWxlciIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUd1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5QdWxsZG93bkFjdGlvbnMvb3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWd2aWV3LnB1bGxkb3duLlZpZXdNYW5hZ2VtZW50QWN0aW9uIiBjb21tYW5kTmFtZT0iVmlldyBNYW5hZ2VtZW50Li4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR3aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVndmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVndmlldy50b29sYmFyLnJlbW92ZUFsbFRlcm1pbmF0ZWQiIGNvbW1hbmROYW1lPSJSZW1vdmUgQWxsIFRlcm1pbmF0ZWQiIGRlc2NyaXB0aW9uPSJSZW1vdmUgQWxsIFRlcm1pbmF0ZWQgTGF1bmNoZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHN2aWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHNWaWV3LnRvb2xiYXIucmVtb3ZlQWxsIiBjb21tYW5kTmFtZT0iUmVtb3ZlIEFsbCIgZGVzY3JpcHRpb249IlJlbW92ZSBBbGwgQnJlYWtwb2ludHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHN2aWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludHNWaWV3LnRvb2xiYXIubGlua1dpdGhEZWJ1Z1ZpZXciIGNvbW1hbmROYW1lPSJMaW5rIHdpdGggRGVidWcgVmlldyIgZGVzY3JpcHRpb249Ikxpbmsgd2l0aCBEZWJ1ZyBWaWV3IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR4U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRzdmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLmJyZWFrcG9pbnRzVmlldy50b29sYmFyLndvcmtpbmdTZXRzIiBjb21tYW5kTmFtZT0iV29ya2luZyBTZXRzLi4uIiBkZXNjcmlwdGlvbj0iTWFuYWdlIFdvcmtpbmcgU2V0cyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c3ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c1ZpZXcudG9vbGJhci5jbGVhckRlZmF1bHRCcmVha3BvaW50R3JvdXAiIGNvbW1hbmROYW1lPSJEZXNlbGVjdCBEZWZhdWx0IFdvcmtpbmcgU2V0IiBkZXNjcmlwdGlvbj0iRGVzZWxlY3QgRGVmYXVsdCBXb3JraW5nIFNldCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c3ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c1ZpZXcudG9vbGJhci5zZXREZWZhdWx0QnJlYWtwb2ludEdyb3VwIiBjb21tYW5kTmFtZT0iU2VsZWN0IERlZmF1bHQgV29ya2luZyBTZXQuLi4iIGRlc2NyaXB0aW9uPSJTZWxlY3QgRGVmYXVsdCBXb3JraW5nIFNldCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c3ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c1ZpZXcudG9vbGJhci5zb3J0QnlBY3Rpb24iIGNvbW1hbmROYW1lPSJTb3J0IEJ5IiBkZXNjcmlwdGlvbj0iU29ydCBCeSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c3ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50c1ZpZXcudG9vbGJhci5ncm91cEJ5QWN0aW9uIiBjb21tYW5kTmFtZT0iR3JvdXAgQnkiIGRlc2NyaXB0aW9uPSJTaG93IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLmV4cHJlc3Npb25zVmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLmV4cHJlc3NzaW9uc1ZpZXcudG9vbGJhci5yZW1vdmVBbGwiIGNvbW1hbmROYW1lPSJSZW1vdmUgQWxsIiBkZXNjcmlwdGlvbj0iUmVtb3ZlIEFsbCBFeHByZXNzaW9ucyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUeXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5leHByZXNzaW9uc1ZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5leHByZXNzc2lvbnNWaWV3LnRvb2xiYXIuQWRkV2F0Y2hFeHByZXNzaW9uIiBjb21tYW5kTmFtZT0iQWRkIFdhdGNoIEV4cHJlc3Npb24uLi4iIGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBuZXcgd2F0Y2ggZXhwcmVzc2lvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUekN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5tZW1vcnlWaWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuUGluTWVtb3J5QmxvY2tBY3Rpb24iIGNvbW1hbmROYW1lPSJQaW4gTWVtb3J5IE1vbml0b3IiIGRlc2NyaXB0aW9uPSJQaW4gTWVtb3J5IE1vbml0b3IiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLk5ld01lbW9yeVZpZXdBY3Rpb24iIGNvbW1hbmROYW1lPSJOZXcgTWVtb3J5IFZpZXciIGRlc2NyaXB0aW9uPSJOZXcgTWVtb3J5IFZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVHppeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLnRvZ2dsZW1vbml0b3JzIiBjb21tYW5kTmFtZT0iVG9nZ2xlIE1lbW9yeSBNb25pdG9ycyBQYW5lIiBkZXNjcmlwdGlvbj0iVG9nZ2xlIE1lbW9yeSBNb25pdG9ycyBQYW5lIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlR6eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeVZpZXcudG9vbGJhci9vcmcuZWNsaXBzZS5kZWJ1Zy51aS5saW5rcmVuZGVyaW5ncGFuZXMiIGNvbW1hbmROYW1lPSJMaW5rIE1lbW9yeSBSZW5kZXJpbmcgUGFuZXMiIGRlc2NyaXB0aW9uPSJMaW5rIE1lbW9yeSBSZW5kZXJpbmcgUGFuZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDBDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLnRhYmxlcmVuZGVyaW5nLnByZWZlcmVuY2VzYWN0aW9uIiBjb21tYW5kTmFtZT0iVGFibGUgUmVuZGVyaW5ncyBQcmVmZXJlbmNlcy4uLiIgZGVzY3JpcHRpb249IiZhbXA7VGFibGUgUmVuZGVyaW5ncyBQcmVmZXJlbmNlcy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUMFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5tZW1vcnlWaWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkudG9nZ2xlc3BsaXRwYW5lIiBjb21tYW5kTmFtZT0iVG9nZ2xlIFNwbGl0IFBhbmUiIGRlc2NyaXB0aW9uPSJUb2dnbGUgU3BsaXQgUGFuZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUMGl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5kZWJ1Zy51aS5tZW1vcnlWaWV3LnRvb2xiYXIvb3JnLmVjbGlwc2UuZGVidWcudWkuc3dpdGNoTWVtb3J5QmxvY2siIGNvbW1hbmROYW1lPSJTd2l0Y2ggTWVtb3J5IE1vbml0b3IiIGRlc2NyaXB0aW9uPSJTd2l0Y2ggTWVtb3J5IE1vbml0b3IiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDB5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuZGVidWcudWkubWVtb3J5Vmlldy50b29sYmFyL29yZy5lY2xpcHNlLmRlYnVnLnVpLm1lbW9yeVZpZXdQcmVmZXJlbmNlc0FjdGlvbiIgY29tbWFuZE5hbWU9IlByZWZlcmVuY2VzLi4uIiBkZXNjcmlwdGlvbj0iJmFtcDtQcmVmZXJlbmNlcy4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUMUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuVmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkudmFyaWFibGVWaWV3QWN0aW9ucy5QcmVmZXJlbmNlcyIgY29tbWFuZE5hbWU9IkphdmEgUHJlZmVyZW5jZXMuLi4iIGRlc2NyaXB0aW9uPSJPcGVucyBwcmVmZXJlbmNlcyBmb3IgSmF2YSB2YXJpYWJsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlZhcmlhYmxlVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnZhcmlhYmxlc1ZpZXdBY3Rpb25zLkFsbFJlZmVyZW5jZXNJblZpZXciIGNvbW1hbmROYW1lPSJTaG93IFJlZmVyZW5jZXMiIGRlc2NyaXB0aW9uPSJTaG93cyByZWZlcmVuY2VzIHRvIGVhY2ggb2JqZWN0IGluIHRoZSB2YXJpYWJsZXMgdmlldyBhcyBhbiBhcnJheSBvZiBvYmplY3RzLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUMWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuVmFyaWFibGVWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkudmFyaWFibGVWaWV3QWN0aW9ucy5TaG93TnVsbEVudHJpZXMiIGNvbW1hbmROYW1lPSJTaG93IE51bGwgQXJyYXkgRW50cmllcyIgZGVzY3JpcHRpb249IlNob3cgTnVsbCBBcnJheSBFbnRyaWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQxeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5WYXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS52YXJpYWJsZVZpZXdBY3Rpb25zLlNob3dRdWFsaWZpZWQiIGNvbW1hbmROYW1lPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgZGVzY3JpcHRpb249IlNob3cgUXVhbGlmaWVkIE5hbWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQyQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5WYXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS52YXJpYWJsZVZpZXdBY3Rpb25zLlNob3dTdGF0aWMiIGNvbW1hbmROYW1lPSJTaG93IFN0YXRpYyBWYXJpYWJsZXMiIGRlc2NyaXB0aW9uPSJTaG93IFN0YXRpYyBWYXJpYWJsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDJTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLlZhcmlhYmxlVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLnZhcmlhYmxlVmlld0FjdGlvbnMuU2hvd0NvbnN0YW50cyIgY29tbWFuZE5hbWU9IlNob3cgQ29uc3RhbnRzIiBkZXNjcmlwdGlvbj0iU2hvdyBDb25zdGFudHMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkudmFyaWFibGVWaWV3QWN0aW9ucy5QcmVmZXJlbmNlcyIgY29tbWFuZE5hbWU9IkphdmEgUHJlZmVyZW5jZXMuLi4iIGRlc2NyaXB0aW9uPSJPcGVucyBwcmVmZXJlbmNlcyBmb3IgSmF2YSB2YXJpYWJsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuZXhwcmVzc2lvblZpZXdBY3Rpb25zLkFsbFJlZmVyZW5jZXNJblZpZXciIGNvbW1hbmROYW1lPSJTaG93IFJlZmVyZW5jZXMiIGRlc2NyaXB0aW9uPSJTaG93ICZhbXA7UmVmZXJlbmNlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUM0N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRXhwcmVzc2lvblZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS52YXJpYWJsZVZpZXdBY3Rpb25zLlNob3dOdWxsRW50cmllcyIgY29tbWFuZE5hbWU9IlNob3cgTnVsbCBBcnJheSBFbnRyaWVzIiBkZXNjcmlwdGlvbj0iU2hvdyBOdWxsIEFycmF5IEVudHJpZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkV4cHJlc3Npb25WaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuZXhwcmVzc2lvblZpZXdBY3Rpb25zLlNob3dRdWFsaWZpZWQiIGNvbW1hbmROYW1lPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgZGVzY3JpcHRpb249IlNob3cgUXVhbGlmaWVkIE5hbWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQzaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5FeHByZXNzaW9uVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmV4cHJlc3Npb25WaWV3QWN0aW9ucy5TaG93U3RhdGljIiBjb21tYW5kTmFtZT0iU2hvdyBTdGF0aWMgVmFyaWFibGVzIiBkZXNjcmlwdGlvbj0iU2hvdyBTdGF0aWMgVmFyaWFibGVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQzeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5FeHByZXNzaW9uVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmV4cHJlc3Npb25WaWV3QWN0aW9ucy5TaG93Q29uc3RhbnRzIiBjb21tYW5kTmFtZT0iU2hvdyBDb25zdGFudHMiIGRlc2NyaXB0aW9uPSJTaG93IENvbnN0YW50cyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuQnJlYWtwb2ludFZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5hY3Rpb25zLkFkZEV4Y2VwdGlvbiIgY29tbWFuZE5hbWU9IkFkZCBKYXZhIEV4Y2VwdGlvbiBCcmVha3BvaW50IiBkZXNjcmlwdGlvbj0iQWRkIEphdmEgRXhjZXB0aW9uIEJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLkJyZWFrcG9pbnRWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuYnJlYWtwb2ludFZpZXdBY3Rpb25zLlNob3dRdWFsaWZpZWQiIGNvbW1hbmROYW1lPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgZGVzY3JpcHRpb249IlNob3cgUXVhbGlmaWVkIE5hbWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ0aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5MYXVuY2hWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkubGF1bmNoVmlld0FjdGlvbnMuU2hvd1RocmVhZEdyb3VwcyIgY29tbWFuZE5hbWU9IlNob3cgVGhyZWFkIEdyb3VwcyIgZGVzY3JpcHRpb249IlNob3cgVGhyZWFkIEdyb3VwcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuTGF1bmNoVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaFZpZXdBY3Rpb25zLlNob3dRdWFsaWZpZWQiIGNvbW1hbmROYW1lPSJTaG93IFF1YWxpZmllZCBOYW1lcyIgZGVzY3JpcHRpb249IlNob3cgUXVhbGlmaWVkIE5hbWVzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ1Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5MYXVuY2hWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkubGF1bmNoVmlld0FjdGlvbnMuU2hvd1N5c3RlbVRocmVhZHMiIGNvbW1hbmROYW1lPSJTaG93IFN5c3RlbSBUaHJlYWRzIiBkZXNjcmlwdGlvbj0iU2hvdyBTeXN0ZW0gVGhyZWFkcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuTGF1bmNoVmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaFZpZXdBY3Rpb25zLlNob3dNb25pdG9yVGhyZWFkSW5mbyIgY29tbWFuZE5hbWU9IlNob3cgTW9uaXRvcnMiIGRlc2NyaXB0aW9uPSJTaG93IHRoZSBUaHJlYWQgJmFtcDsgTW9uaXRvciBJbmZvcm1hdGlvbiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5kaXNwbGF5Vmlld1Rvb2xiYXIuV2F0Y2giIGNvbW1hbmROYW1lPSJXYXRjaCIgZGVzY3JpcHRpb249IkNyZWF0ZSBhIFdhdGNoIEV4cHJlc3Npb24gZnJvbSB0aGUgU2VsZWN0ZWQgVGV4dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5kaXNwbGF5Vmlld1Rvb2xiYXIuRXhlY3V0ZSIgY29tbWFuZE5hbWU9IkV4ZWN1dGUiIGRlc2NyaXB0aW9uPSJFeGVjdXRlIHRoZSBTZWxlY3RlZCBUZXh0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ2Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5EaXNwbGF5Vmlld0FjdGlvbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmRpc3BsYXlWaWV3VG9vbGJhci5EaXNwbGF5IiBjb21tYW5kTmFtZT0iRGlzcGxheSIgZGVzY3JpcHRpb249IkRpc3BsYXkgUmVzdWx0IG9mIEV2YWx1YXRpbmcgU2VsZWN0ZWQgVGV4dCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUNlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuRGlzcGxheVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5kaXNwbGF5Vmlld1Rvb2xiYXIuSW5zcGVjdCIgY29tbWFuZE5hbWU9Ikluc3BlY3QiIGRlc2NyaXB0aW9uPSJJbnNwZWN0IFJlc3VsdCBvZiBFdmFsdWF0aW5nIFNlbGVjdGVkIFRleHQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5vdXRsaW5lLmNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5teWx5bi5jb250ZXh0LnVpLmNvbnRlbnRPdXRsaW5lLmZvY3VzIiBjb21tYW5kTmFtZT0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGRlc2NyaXB0aW9uPSJGb2N1cyBvbiBBY3RpdmUgVGFzayAoQWx0K2NsaWNrIHRvIHJldmVhbCBmaWx0ZXJlZCBlbGVtZW50cykiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4uamF2YS51aS5tYXJrZXJzLmJyZWFrcG9pbnRzLmNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLmFjdGlvbnMuZm9jdXMubWFya2Vycy5icmVha3BvaW50cyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udWkuZGVidWcudmlldy5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4udWkuYWN0aW9ucy5GaWx0ZXJSZXNvdXJjZU5hdmlnYXRvckFjdGlvbiIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIChFeHBlcmltZW50YWwpIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2sgKEV4cGVyaW1lbnRhbCkiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udWkucHJvamVjdGV4cGxvcmVyLmZpbHRlci9vcmcuZWNsaXBzZS5teWx5bi5pZGUudWkuYWN0aW9ucy5mb2N1cy5wcm9qZWN0RXhwbG9yZXIiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIChBbHQrY2xpY2sgdG8gcmV2ZWFsIGZpbHRlcmVkIGVsZW1lbnRzKSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUN2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi51aS5zZWFyY2guY29udHJpYnV0aW9uL29yZy5lY2xpcHNlLm15bHluLmlkZS51aS5hY3Rpb25zLmZvY3VzLnNlYXJjaC5yZXN1bHRzIiBjb21tYW5kTmFtZT0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGRlc2NyaXB0aW9uPSJGb2N1cyBvbiBBY3RpdmUgVGFzayAoQWx0K2NsaWNrIHRvIHJldmVhbCBmaWx0ZXJlZCBlbGVtZW50cykiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDd5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udWkucmVzb3VyY2UubmF2aWdhdG9yLmZpbHRlci9vcmcuZWNsaXBzZS5teWx5bi5pZGUudWkuYWN0aW9ucy5mb2N1cy5yZXNvdXJjZU5hdmlnYXRvciIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2sgKEFsdCtjbGljayB0byByZXZlYWwgZmlsdGVyZWQgZWxlbWVudHMpIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ4Q3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnByb2JsZW1zLmNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5teWx5bi5pZGUudWkuYWN0aW9ucy5mb2N1cy5tYXJrZXJzLnByb2JsZW1zIiBjb21tYW5kTmFtZT0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGRlc2NyaXB0aW9uPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUOFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi5tYXJrZXJzLmFsbC5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4uaWRlLnVpLmFjdGlvbnMuZm9jdXMubWFya2Vycy5hbGwiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ4aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLm1hcmtlcnMudGFza3MuY29udHJpYnV0aW9uL29yZy5lY2xpcHNlLm15bHluLmlkZS51aS5hY3Rpb25zLmZvY3VzLm1hcmtlcnMudGFza3MiIGNvbW1hbmROYW1lPSJGb2N1cyBvbiBBY3RpdmUgVGFzayIgZGVzY3JpcHRpb249IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ4eXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLm1hcmtlcnMuYm9va21hcmtzLmNvbnRyaWJ1dGlvbi9vcmcuZWNsaXBzZS5teWx5bi5pZGUudWkuYWN0aW9ucy5mb2N1cy5tYXJrZXJzLmJvb2ttYXJrcyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2siIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4uamF2YS5leHBsb3Jlci5jb250cmlidXRpb24vb3JnLmVjbGlwc2UubXlseW4uamF2YS5hY3Rpb25zLmZvY3VzLnBhY2thZ2VFeHBsb3JlciIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIEFjdGl2ZSBUYXNrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gQWN0aXZlIFRhc2sgKEFsdCtjbGljayB0byByZXZlYWwgZmlsdGVyZWQgZWxlbWVudHMpIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ5U3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmFjdGlvbnMudmlldy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zZWFyY2gub3BlbiIgY29tbWFuZE5hbWU9IlNlYXJjaCBSZXBvc2l0b3J5Li4uIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlQ5aXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6Om9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLmFjdGlvbnMudmlldy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5zeW5jaHJvbml6ZS5jaGFuZ2VkIiBjb21tYW5kTmFtZT0iU3luY2hyb25pemUgQ2hhbmdlZCIgZGVzY3JpcHRpb249IlN5bmNocm9uaXplIENoYW5nZWQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVDl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuYWN0aW9ucy52aWV3L29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnRhc2tzLnJlc3RvcmUiIGNvbW1hbmROYW1lPSJSZXN0b3JlIFRhc2tzIGZyb20gSGlzdG9yeS4uLiIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJULUN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5hY3Rpb25zLnZpZXcvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkub3Blbi5yZXBvc2l0b3JpZXMudmlldyIgY29tbWFuZE5hbWU9IlNob3cgVGFzayBSZXBvc2l0b3JpZXMgVmlldyIgZGVzY3JpcHRpb249IlNob3cgVGFzayBSZXBvc2l0b3JpZXMgVmlldyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJULVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5hY3Rpb25zLnZpZXcvb3JnLmVjbGlwc2UubXlseW4uZG9jLmxlZ2VuZC5zaG93LmFjdGlvbiIgY29tbWFuZE5hbWU9IlNob3cgVUkgTGVnZW5kIiBkZXNjcmlwdGlvbj0iU2hvdyBUYXNrcyBVSSBMZWdlbmQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVC1peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuYWN0aW9ucy52aWV3L29yZy5lY2xpcHNlLm15bHluLmNvbnRleHQudWkuYWN0aW9ucy50YXNrbGlzdC5mb2N1cyIgY29tbWFuZE5hbWU9IkZvY3VzIG9uIFdvcmt3ZWVrIiBkZXNjcmlwdGlvbj0iRm9jdXMgb24gV29ya3dlZWsiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVC15eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UucGRlLnVpLmxvZ1ZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5Mb2dWaWV3QWN0aW9ucy5zaG93U3RhY2tUcmFjZSIgY29tbWFuZE5hbWU9IlNob3cgU3RhY2sgVHJhY2UgaW4gQ29uc29sZSBWaWV3IiBkZXNjcmlwdGlvbj0iU2hvdyBTdGFjayBUcmFjZSBpbiBDb25zb2xlIFZpZXciIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVF9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UucnNlLnVpLnZpZXcuc3lzdGVtVmlldy50b29sYmFyL29yZy5lY2xpcHNlLnJzZS51aS52aWV3LnN5c3RlbVZpZXcudG9vbGJhci5saW5rV2l0aFN5c3RlbVZpZXciIGNvbW1hbmROYW1lPSJMaW5rIHdpdGggRWRpdG9yIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlRfU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6OmJyZWFrcG9pbnRzVmlld0FjdGlvbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuZGVidWcudWkuYWRkLnNjcmlwdGxvYWQuYnJlYWtwb2ludCIgY29tbWFuZE5hbWU9IkFkZCBTY3JpcHQgTG9hZCBCcmVha3BvaW50IiBkZXNjcmlwdGlvbj0iQWRkIFNjcmlwdCBMb2FkIEJyZWFrcG9pbnQiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVF9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6YnJlYWtwb2ludHNWaWV3QWN0aW9ucy9vcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuYnJlYWtwb2ludFZpZXdBY3Rpb25zLlNob3dRdWFsaWZpZWQiIGNvbW1hbmROYW1lPSJTdXNwZW5kIEZvciBBbGwgU2NyaXB0IExvYWRzIiBkZXNjcmlwdGlvbj0iU3VzcGVuZHMgd2hlbiBhbnkgc2NyaXB0IGlzIGxvYWRlZCIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJUX3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46OjpicmVha3BvaW50c1ZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLnN1c3BlbmQub24uZXhjZXB0aW9ucyIgY29tbWFuZE5hbWU9IlN1c3BlbmQgT24gSmF2YVNjcmlwdCBFeGNlcHRpb25zIiBkZXNjcmlwdGlvbj0iU3VzcGVuZCBvbiBhbGwgSmF2YVNjcmlwdCBleGNlcHRpb25zIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVBQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQVVUT0dFTjo6OmRlYnVnVmlld0FjdGlvbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuZGVidWcudWkuc2hvdy5hbGwuc2NyaXB0cyIgY29tbWFuZE5hbWU9IlNob3cgQWxsIFNjcmlwdHMiIGRlc2NyaXB0aW9uPSJTaG93cyBvciBoaWRlcyBhbGwgc2NyaXB0cyBsb2FkZWQgaW4gdGhlIHZpc2libGUgdGFyZ2V0cyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQVN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46Ojp2YXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLnZhcmlhYmxldmlldy5zaG93LmZ1bmN0aW9ucyIgY29tbWFuZE5hbWU9IlNob3cgZnVuY3Rpb24gdmFyaWFibGVzIiBkZXNjcmlwdGlvbj0iU2hvdyBvciBoaWRlIGZ1bmN0aW9uIHZhcmlhYmxlcyIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46Ojp2YXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLnZhcmlhYmxldmlldy5zaG93LnRoaXMiIGNvbW1hbmROYW1lPSJTaG93ICd0aGlzJyB2YXJpYWJsZSIgZGVzY3JpcHRpb249IlNob3cgb3IgaGlkZSB0aGUgdGhpcyB2YXJpYWJsZSIgY2F0ZWdvcnk9Il9BSEJVUUN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkFVVE9HRU46Ojp2YXJpYWJsZVZpZXdBY3Rpb25zL29yZy5lY2xpcHNlLndzdC5qc2R0LmRlYnVnLnVpLnZhcmlhYmxldmlldy5zaG93LnByb3RvdHlwZXMiIGNvbW1hbmROYW1lPSJTaG93IHByb3RvIHZhcmlhYmxlcyIgZGVzY3JpcHRpb249IlNob3cgb3IgaGlkZSBwcm90byB2YXJpYWJsZXMiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUJDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJBVVRPR0VOOjo6b3JnLmVjbGlwc2UudWkuYXJ0aWNsZXMuYWN0aW9uLmNvbnRyaWJ1dGlvbi52aWV3L29yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUiIGNvbW1hbmROYW1lPSJXUy1JIFByb2ZpbGUgVmFsaWRhdG9yIiBkZXNjcmlwdGlvbj0iVmFsaWRhdGUgV1MtSSBNZXNzYWdlIExvZyBGaWxlIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVCU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuU2hvd1Rlc3RSZXN1bHRzIiBjb21tYW5kTmFtZT0iU2hvdyBUZXN0IFJlc3VsdHMiIGNhdGVnb3J5PSJfQUhCVVhDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUJpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuc25pcG1hdGNoLnJjcC5jb21tYW5kcy5jb21wbGV0aW9uIiBjb21tYW5kTmFtZT0iU25pcG1hdGNoIFNuaXBwZXQgQ29tcGxldGlvbiIgZGVzY3JpcHRpb249Ik9wZW4gYSBkaWFsb2cgdG8gc2VhcmNoIGZvciBhbmQgaW5zZXJ0IGNvZGUgc25pcHBldHMiIGNhdGVnb3J5PSJfQUhCVVdpeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuc25pcG1hdGNoLnJjcC5jb21tYW5kcy5jcmVhdGVTbmlwcGV0IiBjb21tYW5kTmFtZT0iQ3JlYXRlIFNuaXBwZXQuLi4iIGRlc2NyaXB0aW9uPSJDcmVhdGVzIGEgbmV3IFNuaXBtYXRjaCBjb2RlIHNuaXBwZXQgZnJvbSB0aGUgY3VycmVudCBlZGl0b3ImI3gyMDE5O3MgdGV4dCBzZWxlY3Rpb24iIGNhdGVnb3J5PSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMudWkuY29tbWFuZC5TaG93QnVpbGRPdXRwdXQiIGNvbW1hbmROYW1lPSJTaG93IEJ1aWxkIE91dHB1dCIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVQ1N4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kcy5PcGVuQnVpbGRFbGVtZW50V2l0aEJyb3dzZXIiIGNvbW1hbmROYW1lPSJPcGVuIEJ1aWxkIHdpdGggQnJvd3NlciIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIj4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEJVQ2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9ImVsZW1lbnQiIG5hbWU9IkVsZW1lbnQiLz4KKyAgPC9jb21tYW5kcz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVDeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmRzLk9wZW5CdWlsZEVsZW1lbnQiIGNvbW1hbmROYW1lPSJPcGVuIEJ1aWxkIEVsZW1lbnQiIGNhdGVnb3J5PSJfQUhCVVhDeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhCVURDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJlbGVtZW50IiBuYW1lPSJFbGVtZW50Ii8+CisgIDwvY29tbWFuZHM+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kLk5ld1Rhc2tGcm9tQnVpbGQiIGNvbW1hbmROYW1lPSJOZXcgVGFzayBGcm9tIEJ1aWxkIiBjYXRlZ29yeT0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVEaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuTmV3VGFza0Zyb21UZXN0IiBjb21tYW5kTmFtZT0iTmV3IFRhc2sgRnJvbSBUZXN0IiBjYXRlZ29yeT0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVEeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuU2hvd0J1aWxkT3V0cHV0LnVybCIgY29tbWFuZE5hbWU9IlNob3cgQnVpbGQgT3V0cHV0IiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVFQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuU2hvd1Rlc3RSZXN1bHRzLnVybCIgY29tbWFuZE5hbWU9IlNob3cgVGVzdCBSZXN1bHRzIiBjYXRlZ29yeT0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVFU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmQuQWJvcnRCdWlsZCIgY29tbWFuZE5hbWU9IkFib3J0IEJ1aWxkIiBjYXRlZ29yeT0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiLz4KKyAgPGNvbW1hbmRzIHhtaTppZD0iX0FIQlVFaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNvbW1hbmRzLkNvcHlEZXRhaWxzIiBjb21tYW5kTmFtZT0iQ29weSBEZXRhaWxzIiBjYXRlZ29yeT0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQlVFeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ia2luZCIgbmFtZT0iS2luZCIvPgorICAgIDxwYXJhbWV0ZXJzIHhtaTppZD0iX0FIQlVGQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iZWxlbWVudCIgbmFtZT0iRWxlbWVudCIvPgorICA8L2NvbW1hbmRzPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUZTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMudWkuY29tbWFuZC5SdW5CdWlsZCIgY29tbWFuZE5hbWU9IlJ1biBCdWlsZCIgY2F0ZWdvcnk9Il9BSEJVWEN4UUVleW15YnpzdUw5bkJBIi8+CisgIDxjb21tYW5kcyB4bWk6aWQ9Il9BSEJVRml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLm15bHluLmJ1aWxkcy51aS5jb21tYW5kcy5PcGVuQnVpbGRFbGVtZW50V2l0aEJyb3dzZXIudXJsIiBjb21tYW5kTmFtZT0iT3BlbiBCdWlsZCB3aXRoIEJyb3dzZXIiIGNhdGVnb3J5PSJfQUhCVVFDeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUZ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY29tbWFuZC5wb2xsTmV3c0ZlZWRzIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AiIGNvbW1hbmROYW1lPSIlY29tbWFuZC5uYW1lLnBvbGxOZXdzRmVlZHMiIGNhdGVnb3J5PSJfQUhCVVhTeFFFZXlteWJ6c3VMOW5CQSIvPgorICA8Y29tbWFuZHMgeG1pOmlkPSJfQUhCVUdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY29tbWFuZC5yZWFkTmV3c0l0ZW1zIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AiIGNvbW1hbmROYW1lPSIlY29tbWFuZC5uYW1lLnJlYWROZXdzSXRlbXMiIGNhdGVnb3J5PSJfQUhCVVhTeFFFZXlteWJ6c3VMOW5CQSI+CisgICAgPHBhcmFtZXRlcnMgeG1pOmlkPSJfQUhCVUdTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY29tbWFuZFBhcmFtZXRlci5uZXdzSXRlbXMiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcCIgbmFtZT0iTmV3cyBJdGVtcyIgdHlwZUlkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY29tbWFuZFBhcmFtZXRlclR5cGUubmV3c0l0ZW1zIiBvcHRpb25hbD0iZmFsc2UiLz4KKyAgICA8cGFyYW1ldGVycyB4bWk6aWQ9Il9BSEJVR2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLnJjcC5jb21tYW5kUGFyYW1ldGVyLm9wZW5Ccm93c2VyIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AiIG5hbWU9Ik9wZW4gQnJvd3NlciIgdHlwZUlkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY29tbWFuZFBhcmFtZXRlclR5cGUuYm9vbGVhbiIvPgorICA8L2NvbW1hbmRzPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVHeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQuY29yZS5jb21tYW5kcy5zZXJ2aWNlIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LmNvcmUuY29tbWFuZHMvb3JnLmVjbGlwc2UuZTQuY29yZS5jb21tYW5kcy5Db21tYW5kU2VydmljZUFkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUhDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS5jb250ZXh0cy5zZXJ2aWNlIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzL29yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLkNvbnRleHRTZXJ2aWNlQWRkb24iLz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVSFN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmJpbmRpbmdzLnNlcnZpY2UiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkuYmluZGluZ3Mvb3JnLmVjbGlwc2UuZTQudWkuYmluZGluZ3MuQmluZGluZ1NlcnZpY2VBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVIaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmNvbW1hbmRzLm1vZGVsIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wbGF0Zm9ybSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC9vcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guYWRkb25zLkNvbW1hbmRQcm9jZXNzaW5nQWRkb24iLz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVSHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5jb250ZXh0cy5tb2RlbCIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLmFkZG9ucy5Db250ZXh0UHJvY2Vzc2luZ0FkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUlDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYmluZGluZ3MubW9kZWwiIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guc3d0LnV0aWwuQmluZGluZ1Byb2Nlc3NpbmdBZGRvbiIvPgorICA8YWRkb25zIHhtaTppZD0iX0FIQlVJU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0iQ2xlYW51cCBBZGRvbiIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLmNsZWFudXBhZGRvbi5DbGVhbnVwQWRkb24iLz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVSWl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9IkRuRCBBZGRvbiIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLnN3dC9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2guYWRkb25zLmRuZGFkZG9uLkRuREFkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUl5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJNaW5NYXggQWRkb24iIGNvbnRyaWJ1dG9yVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBsYXRmb3JtIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5taW5tYXguTWluTWF4QWRkb24iPgorICAgIDxwZXJzaXN0ZWRTdGF0ZSBrZXk9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyRUVQZXJzcGVjdGl2ZS4mbHQ7SmF2YSBFRT4iIHZhbHVlPSIiLz4KKyAgPC9hZGRvbnM+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUpDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2guYWRkb24uMCIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGxhdGZvcm0iIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gvb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLmFkZG9ucy5IYW5kbGVyUHJvY2Vzc2luZ0FkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUpTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJTcGxpdHRlckFkZG9uIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zd3Qvb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLmFkZG9ucy5zcGxpdHRlcmFkZG9uLlNwbGl0dGVyQWRkb24iLz4KKyAgPGFkZG9ucyB4bWk6aWQ9Il9BSEJVSml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5hZGRvbi4wIiBjb250cmlidXRvclVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51aS5pZGUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS51aS5pZGUvb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLmFkZG9ucy5TYXZlQWxsRGlydHlQYXJ0c0FkZG9uIi8+CisgIDxhZGRvbnMgeG1pOmlkPSJfQUhCVUp5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24uYWRkb24uMCIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uL29yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5hZGRvbnMuTW9kZWxDbGVhbnVwQWRkb24iLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVUtDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS5lZGl0IiBuYW1lPSJFZGl0Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVLU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQudWkuZWRpdG9yLmNhdGVnb3J5IiBuYW1lPSJXaWtpVGV4dCBNYXJrdXAgRWRpdGluZyBDb21tYW5kcyIgZGVzY3JpcHRpb249ImNvbW1hbmRzIGZvciBlZGl0aW5nIGxpZ2h0d2VpZ2h0IG1hcmt1cCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVS2l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5wcm9qZWN0IiBuYW1lPSJCdWlsZHNoaXAiIGRlc2NyaXB0aW9uPSJDb250YWlucyB0aGUgQnVpbGRzaGlwIHNwZWNpZmljIGNvbW1hbmRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVLeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkudGV4dEVkaXRvciIgbmFtZT0iVGV4dCBFZGl0aW5nIiBkZXNjcmlwdGlvbj0iVGV4dCBFZGl0aW5nIENvbW1hbmRzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVMQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uY29udGV4dC51aS5jb21tYW5kcyIgbmFtZT0iRm9jdXNlZCBVSSIgZGVzY3JpcHRpb249IlRhc2stRm9jdXNlZCBJbnRlcmZhY2UiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVUxTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jYXRlZ29yeS5zb3VyY2UiIG5hbWU9IlNvdXJjZSIgZGVzY3JpcHRpb249IkphdmFTY3JpcHQgU291cmNlIEFjdGlvbnMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVUxpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5jb21tYW5kcyIgbmFtZT0iVGFzayBSZXBvc2l0b3JpZXMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVUx5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpIiBuYW1lPSJTZXJ2ZXIiIGRlc2NyaXB0aW9uPSJTZXJ2ZXIiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU1DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi53aWtpdGV4dC5jb250ZXh0LnVpLmNvbW1hbmRzIiBuYW1lPSJNeWx5biBXaWtpVGV4dCIgZGVzY3JpcHRpb249IkNvbW1hbmRzIHVzZWQgZm9yIE15bHluIFdpa2lUZXh0Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVNU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZWNsZW1tYS51aSIgbmFtZT0iRWNsRW1tYSBDb2RlIENvdmVyYWdlIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVNaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuZmlsZSIgbmFtZT0iRmlsZSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LndpbmRvdyIgbmFtZT0iV2luZG93Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVOQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnJlc3VsdC5jYXRlZ29yeSIgbmFtZT0iU1FMIFJlc3VsdHMgVmlldyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVTlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5nZW5lcmljZWRpdG9yLmV4dGVuc2lvbi5jYXRlZ29yeS5zb3VyY2UiIG5hbWU9IlRhcmdldCBEZWZpbml0aW9uIFNvdXJjZSIgZGVzY3JpcHRpb249IlRhcmdldCBEZWZpbml0aW9uIFNvdXJjZSBQYWdlIGFjdGlvbnMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU5peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jYXRlZ29yeS5ydW4iIG5hbWU9IlJ1bi9EZWJ1ZyIgZGVzY3JpcHRpb249IlJ1bi9EZWJ1ZyBjb21tYW5kIGNhdGVnb3J5Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVOeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuZGlhbG9ncyIgbmFtZT0iRGlhbG9ncyIgZGVzY3JpcHRpb249IkNvbW1hbmRzIGZvciBvcGVuaW5nIGRpYWxvZ3MiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU9DeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waCIgbmFtZT0iT29tcGgiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU9TeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5jaHJvbWl1bS5kZWJ1Zy5qcy5jYXRlZ29yeSIgbmFtZT0iQ2hyb21lIC8gQ2hyb21pdW0iLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVU9peFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5qcHQuanBhLnVpLmpwYU1ldGFkYXRhQ29udmVyc2lvbkNvbW1hbmRzIiBuYW1lPSJKUEEgTWV0YWRhdGEgQ29udmVyc2lvbiIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVT3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3IiBuYW1lPSJYUGF0aCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUEN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpwdC5qcGEudWkuanBhU3RydWN0dXJlVmlld0NvbW1hbmRzIiBuYW1lPSJKUEEgU3RydWN0dXJlIFZpZXciLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVBTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5jb21tb25zLnJlcG9zaXRvcmllcy51aS5jYXRlZ29yeS5UZWFtIiBuYW1lPSJUZWFtIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVQaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UucGRlLnVpLmNhdGVnb3J5LnNvdXJjZSIgbmFtZT0iTWFuaWZlc3QgRWRpdG9yIFNvdXJjZSIgZGVzY3JpcHRpb249IlBERSBTb3VyY2UgUGFnZSBhY3Rpb25zIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVQeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2Uub29tcGguY29tbWFuZHMiIG5hbWU9Ik9vbXBoIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVRQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5jYXRlZ29yaWVzLmF1dG9nZW5lcmF0ZWQiIG5hbWU9IlVuY2F0ZWdvcml6ZWQiIGRlc2NyaXB0aW9uPSJDb21tYW5kcyB0aGF0IHdlcmUgZWl0aGVyIGF1dG8tZ2VuZXJhdGVkIG9yIGhhdmUgbm8gY2F0ZWdvcnkiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVFTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5jYXRlZ29yeS5yZWZhY3RvcmluZyIgbmFtZT0iUmVmYWN0b3IgLSBKYXZhU2NyaXB0IiBkZXNjcmlwdGlvbj0iSmF2YVNjcmlwdCBSZWZhY3RvcmluZyBBY3Rpb25zIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVRaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudGVhbS51aS5jYXRlZ29yeS50ZWFtIiBuYW1lPSJUZWFtIiBkZXNjcmlwdGlvbj0iQWN0aW9ucyB0aGF0IGFwcGx5IHdoZW4gd29ya2luZyB3aXRoIGEgVGVhbSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LnZpZXdzIiBuYW1lPSJWaWV3cyIgZGVzY3JpcHRpb249IkNvbW1hbmRzIGZvciBvcGVuaW5nIHZpZXdzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVSQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuanN0LnBhZ2VkZXNpZ25lci5wYWdlbGF5b3V0IiBuYW1lPSJXZWIgUGFnZSBFZGl0b3IgTGF5b3V0Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVSU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuY2F0ZWdvcnkuZWRpdG9yIiBuYW1lPSJUYXNrIEVkaXRvciIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVUml4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5tYXJrZXJDb250ZW50cyIgbmFtZT0iQ29udGVudHMiIGRlc2NyaXB0aW9uPSJUaGUgY2F0ZWdvcnkgZm9yIG1lbnUgY29udGVudHMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVJ5eFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5vb21waC5zZXR1cC5jYXRlZ29yeSIgbmFtZT0iT29tcGggU2V0dXAiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVNDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS5uYXZpZ2F0ZSIgbmFtZT0iTmF2aWdhdGUiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVNTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLmNvbW1hbmRzIiBuYW1lPSJKYXZhIENvbnRleHQiIGRlc2NyaXB0aW9uPSJKYXZhIFRhc2stRm9jdXNlZCBJbnRlcmZhY2UgQ29tbWFuZHMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVNpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5kZWJ1Zy51aS5jYXRlZ29yeSIgbmFtZT0iSmF2YVNjcmlwdCBEZWJ1ZyIgZGVzY3JpcHRpb249IlRvb2xpbmcgZm9yIGRlYnVnZ2luZyBKYXZhU2NyaXB0Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVTeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudG0udGVybWluYWwudmlldy51aS5jb21tYW5kcy5jYXRlZ29yeSIgbmFtZT0iVGVybWluYWwgQ29tbWFuZHMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVRDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5jb21wYXJlLnVpLmNhdGVnb3J5LmNvbXBhcmUiIG5hbWU9IkNvbXBhcmUiIGRlc2NyaXB0aW9uPSJDb21wYXJlIGNvbW1hbmQgY2F0ZWdvcnkiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVRTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yc2UudWkuY29tbWFuZHMuY2F0ZWdvcnkiIG5hbWU9IlJlbW90ZSBTeXN0ZW1zIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVUaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmVuYWJsZW1lbnQuc3liYXNlLmFzYS5zY2hlbWFvYmplY3RlZGl0b3IuZXhhbXBsZXMudGFibGVzY2hlbWFlZHRvci4xMHgiIG5hbWU9IkFTQSA5LnggdGFibGUgc2NoZW1hIGVkaXRvciIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVHl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5jYXRlZ29yeS5yZWZhY3RvcmluZyIgbmFtZT0iUmVmYWN0b3IgLSBKYXZhIiBkZXNjcmlwdGlvbj0iSmF2YSBSZWZhY3RvcmluZyBBY3Rpb25zIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVVQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZW1mLmNvZGVnZW4uZWNvcmUudWkuQ29tbWFuZHMiIG5hbWU9IkVNRiBDb2RlIEdlbmVyYXRpb24iIGRlc2NyaXB0aW9uPSJDb21tYW5kcyBmb3IgdGhlIEVNRiBjb2RlIGdlbmVyYXRpb24gdG9vbHMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVVTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS5oZWxwIiBuYW1lPSJIZWxwIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVVaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkucHJvamVjdCIgbmFtZT0iUHJvamVjdCIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVXl4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnRtLnRlcm1pbmFsLmNhdGVnb3J5MSIgbmFtZT0iVGVybWluYWwgdmlldyBjb21tYW5kcyIgZGVzY3JpcHRpb249IlRlcm1pbmFsIHZpZXcgY29tbWFuZHMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVZDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5zZWFyY2gudWkuY2F0ZWdvcnkuc2VhcmNoIiBuYW1lPSJTZWFyY2giIGRlc2NyaXB0aW9uPSJTZWFyY2ggY29tbWFuZCBjYXRlZ29yeSIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVVlN4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmVnaXQudWkuY29tbWFuZENhdGVnb3J5IiBuYW1lPSJHaXQiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVZpeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsZWRpdG9yLmNhdGVnb3J5IiBuYW1lPSJEYXRhYmFzZSBUb29scyIgZGVzY3JpcHRpb249IkRhdGFiYXNlIERldmVsb3BtZW50IHRvb2xzIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVWeXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkucGVyc3BlY3RpdmVzIiBuYW1lPSJQZXJzcGVjdGl2ZXMiIGRlc2NyaXB0aW9uPSJDb21tYW5kcyBmb3Igb3BlbmluZyBwZXJzcGVjdGl2ZXMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVdDeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5sdGsudWkuY2F0ZWdvcnkucmVmYWN0b3JpbmciIG5hbWU9IlJlZmFjdG9yaW5nIi8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVXU3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuZ2VmLmNhdGVnb3J5LnZpZXciIG5hbWU9IlZpZXciIGRlc2NyaXB0aW9uPSJWaWV3Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVXaXhRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNhdGVnb3J5LnNvdXJjZSIgbmFtZT0iU291cmNlIiBkZXNjcmlwdGlvbj0iSmF2YSBTb3VyY2UgQWN0aW9ucyIvPgorICA8Y2F0ZWdvcmllcyB4bWk6aWQ9Il9BSEJVV3l4UUVleW15YnpzdUw5bkJBIiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLnNweS5jb21tYW5kcy5jYXRlZ29yeSIgbmFtZT0iU3B5Ii8+CisgIDxjYXRlZ29yaWVzIHhtaTppZD0iX0FIQlVYQ3hRRWV5bXlienN1TDluQkEiIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UubXlseW4uYnVpbGRzLnVpLmNhdGVnb3J5LkNvbW1hbmRzIiBuYW1lPSJCdWlsZHMiLz4KKyAgPGNhdGVnb3JpZXMgeG1pOmlkPSJfQUhCVVhTeFFFZXlteWJ6c3VMOW5CQSIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubmV3cy5yY3AuY2F0ZWdvcnkubmV3cyIgY29udHJpYnV0b3JVUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MucmNwIiBuYW1lPSIlY2F0ZWdvcnkubmFtZS5uZXdzIiBkZXNjcmlwdGlvbj0iJWNhdGVnb3J5LmRlc2NyaXB0aW9uLm5ld3MiLz4KKzwvYXBwbGljYXRpb246QXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTBiNzcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvQWRkXzMyX0RlcGVuZGVuY3kuaGlzdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0FkZF8zMl9EZXBlbmRlbmN5Lmhpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MzMxNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0FkZF8zMl9EZXBlbmRlbmN5Lmhpc3QKQEAgLTAsMCArMSw0IEBACisjV2VkIEFwciAyMiAxNjo1NzowNSBDRVNUIDIwMjAKK19fREVGQVVMVF9fPWZhbHNlCitvcmcuZWNsaXBzZS5oZWxwLnVpLmxvY2FsU2VhcmNoLm1hc3Rlcj10cnVlCitleHByZXNzaW9uPUFkZCBEZXBlbmRlbmN5CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9EZWZhdWx0LnByZWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9EZWZhdWx0LnByZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmNTdhNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0RlZmF1bHQucHJlZgpAQCAtMCwwICsxLDIgQEAKKyNUdWUgSnVuIDE2IDEyOjE3OjI3IENFU1QgMjAyMAorX19ERUZBVUxUX189dHJ1ZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvTGlua18zMl9Tb3VyY2UuaGlzdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0xpbmtfMzJfU291cmNlLmhpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0YjE5NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL0xpbmtfMzJfU291cmNlLmhpc3QKQEAgLTAsMCArMSw0IEBACisjVHVlIE1heSAwNSAwOToyOTozOSBDRVNUIDIwMjAKK19fREVGQVVMVF9fPWZhbHNlCitvcmcuZWNsaXBzZS5oZWxwLnVpLmxvY2FsU2VhcmNoLm1hc3Rlcj10cnVlCitleHByZXNzaW9uPUxpbmsgU291cmNlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9TZWxlY3RfMzJfRGlyZWN0aXZlXzMyX1R5cGUuaGlzdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL1NlbGVjdF8zMl9EaXJlY3RpdmVfMzJfVHlwZS5oaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NjA2ODUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9TZWxlY3RfMzJfRGlyZWN0aXZlXzMyX1R5cGUuaGlzdApAQCAtMCwwICsxLDQgQEAKKyNUdWUgSnVuIDE2IDEyOjE3OjI3IENFU1QgMjAyMAorX19ERUZBVUxUX189ZmFsc2UKK29yZy5lY2xpcHNlLmhlbHAudWkubG9jYWxTZWFyY2gubWFzdGVyPXRydWUKK2V4cHJlc3Npb249U2VsZWN0IERpcmVjdGl2ZSBUeXBlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9Ub21jYXRfMzJfU2VydmVyLmhpc3QgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9Ub21jYXRfMzJfU2VydmVyLmhpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyMjMxYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuaGVscC51aS9zY29wZV9zZXRzL1RvbWNhdF8zMl9TZXJ2ZXIuaGlzdApAQCAtMCwwICsxLDYgQEAKKyNXZWQgTm92IDIwIDE2OjI5OjA4IENFVCAyMDE5CitfX0RFRkFVTFRfXz1mYWxzZQorb3JnLmVjbGlwc2Uuc2RrLkVjbGlwc2UubWFzdGVyPXRydWUKK29yZy5lY2xpcHNlLnNkay5Hb29nbGUubWFzdGVyPXRydWUKK29yZy5lY2xpcHNlLmhlbHAudWkubG9jYWxTZWFyY2gubWFzdGVyPXRydWUKK2V4cHJlc3Npb249VG9tY2F0IFNlcnZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvcGFja2FnZS5oaXN0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5oZWxwLnVpL3Njb3BlX3NldHMvcGFja2FnZS5oaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzc3NjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmhlbHAudWkvc2NvcGVfc2V0cy9wYWNrYWdlLmhpc3QKQEAgLTAsMCArMSw0IEBACisjV2VkIEFwciAyMiAxODowMzowOCBDRVNUIDIwMjAKK19fREVGQVVMVF9fPWZhbHNlCitvcmcuZWNsaXBzZS5oZWxwLnVpLmxvY2FsU2VhcmNoLm1hc3Rlcj10cnVlCitleHByZXNzaW9uPXBhY2thZ2UKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA3ODE2ODE0MS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA3ODE2ODE0MS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc3MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMDc4MTY4MTQxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA4NTAzODM2Ni5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA4NTAzODM2Ni5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDIwOWYxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMDg1MDM4MzY2LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA5Njg1OTU3MC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTA5Njg1OTU3MC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2NhMWJlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMDk2ODU5NTcwLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTEyODgzNjEzMi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTEyODgzNjEzMi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFmYzFjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMTI4ODM2MTMyLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTIyNzEwODMwOC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTIyNzEwODMwOC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTI5ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMjI3MTA4MzA4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTI1OTUxODIzNy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTI1OTUxODIzNy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWUyNDEyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMjU5NTE4MjM3LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTMxNjkyMTQzNS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTMxNjkyMTQzNS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODMyM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMzE2OTIxNDM1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTMxOTk3MDU1LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMzE5OTcwNTUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2OTgxOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTMxOTk3MDU1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTM5NTk0ODkwMC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTM5NTk0ODkwMC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2IyYTcwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xMzk1OTQ4OTAwLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTQ4NzEyODAyNS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTQ4NzEyODAyNS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JhNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xNDg3MTI4MDI1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTUwMDYwMDg2MS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTUwMDYwMDg2MS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFmYzFjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xNTAwNjAwODYxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTUwNTI3MDI5Ni5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTUwNTI3MDI5Ni5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQxMDYxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xNTA1MjcwMjk2LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTU5MTQwMzgwOC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTU5MTQwMzgwOC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjI0ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xNTkxNDAzODA4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTc0NzY4MjgxNC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTc0NzY4MjgxNC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU1MDkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xNzQ3NjgyODE0LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTg5Nzk1NDc4OS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTg5Nzk1NDc4OS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQ2MzFjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xODk3OTU0Nzg5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTkwOTg4MDUxOC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTkwOTg4MDUxOC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk4OWUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xOTA5ODgwNTE4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTk1ODU3NDUyNS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTk1ODU3NDUyNS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFkMDQzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xOTU4NTc0NTI1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTk4MzA2MDQ5OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMTk4MzA2MDQ5OC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA0NTIwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8xOTgzMDYwNDk4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjAwMjQ1ODIyMS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjAwMjQ1ODIyMS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2NWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMDAyNDU4MjIxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjAyNzc2Mzc0NS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjAyNzc2Mzc0NS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTUzMzEwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMDI3NzYzNzQ1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjA1MDI3MDY2OS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjA1MDI3MDY2OS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmMyMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMDUwMjcwNjY5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjA2ODg5MzM4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMDY4ODkzMzguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmY2Y0YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjA2ODg5MzM4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjI0NDM4NzA1Ny5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjI0NDM4NzA1Ny5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGEwMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMjQ0Mzg3MDU3LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjI3NzE0NDE4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMjc3MTQ0MTguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNTkwOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjI3NzE0NDE4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjM1MDQ4ODUyNi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjM1MDQ4ODUyNi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE3ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMzUwNDg4NTI2LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjM4ODIxMjU3MS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjM4ODIxMjU3MS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQyYzE3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yMzg4MjEyNTcxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjQwNjk5NDAxLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yNDA2OTk0MDEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkMzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjQwNjk5NDAxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjY0MjY0OTI1OS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjY0MjY0OTI1OS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzcwNjdlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yNjQyNjQ5MjU5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjY1Njk1MjM4OS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjY1Njk1MjM4OS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWU3MmJkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yNjU2OTUyMzg5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjcwNjc5OTE2MS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjcwNjc5OTE2MS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmJmYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yNzA2Nzk5MTYxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjczMTM1MTEwMy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjczMTM1MTEwMy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZmZjkxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yNzMxMzUxMTAzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjgwNjMzNTAuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4MDYzMzUwLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOTY1M2IKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlLzI4MDYzMzUwLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjgxNTAxMzM4OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjgxNTAxMzM4OC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTI2OWQyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yODE1MDEzMzg4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjg3NDg0OTE1Ni5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjg3NDg0OTE1Ni5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQ2NGFiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yODc0ODQ5MTU2LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjk0Mzg1MTk2NS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjk0Mzg1MTk2NS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA3ZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yOTQzODUxOTY1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjk1ODkzNTMxNi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMjk1ODkzNTMxNi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJjNDZmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8yOTU4OTM1MzE2LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzA3ODk4NjIzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMDc4OTg2MjMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExN2YwOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzA3ODk4NjIzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzA4NjU3NjIwNS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzA4NjU3NjIwNS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDM0NTdlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMDg2NTc2MjA1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzEzNDIxMzUwNi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzEzNDIxMzUwNi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTMzM2FlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMTM0MjEzNTA2LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE0MDcwMTcwMC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE0MDcwMTcwMC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE0OWMyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMTQwNzAxNzAwLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE0OTc0Nzk4My5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE0OTc0Nzk4My5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmUyNDhiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMTQ5NzQ3OTgzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE1MjczOTMzOS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzE1MjczOTMzOS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQxYjUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMTUyNzM5MzM5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzIyMzE5Mjc2OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzIyMzE5Mjc2OC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODRkYWFmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMjIzMTkyNzY4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzI1MTc2OTI3My5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzI1MTc2OTI3My5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2I1OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMjUxNzY5MjczLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzM0NDM2MDYwNy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzM0NDM2MDYwNy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTNiYTdhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zMzQ0MzYwNjA3LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQxMjYzOTU0LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNDEyNjM5NTQuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1MWFkMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQxMjYzOTU0LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQxNjMzODQ3NS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQxNjMzODQ3NS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTc4YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNDE2MzM4NDc1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQ0OTIyMjAzMy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzQ0OTIyMjAzMy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI5MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNDQ5MjIyMDMzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzUyODg2NTEzNy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzUyODg2NTEzNy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWFkYTUwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNTI4ODY1MTM3LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzUzNDE0NjQwNC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzUzNDE0NjQwNC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA5ZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNTM0MTQ2NDA0LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzU4NzkyODczMS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzU4NzkyODczMS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWY2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNTg3OTI4NzMxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzYwOTMwNDQyMy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzYwOTMwNDQyMy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTk5YTczCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNjA5MzA0NDIzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzczNzMxNDY3Mi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzczNzMxNDY3Mi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJmZTdmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zNzM3MzE0NjcyLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzg0NTA0NTgyMi5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzg0NTA0NTgyMi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWViMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zODQ1MDQ1ODIyLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzkwMDM5NzUzOS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzkwMDM5NzUzOS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWY2MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zOTAwMzk3NTM5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzkxNzM0Nzk1Ny5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzkxNzM0Nzk1Ny5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjI5YjYzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zOTE3MzQ3OTU3LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzk0NjA1ODQ3NC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvMzk0NjA1ODQ3NC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJmMDgxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS8zOTQ2MDU4NDc0LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDEzNjQzNTc4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS80MTM2NDM1NzguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE3N2Q3MAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDEzNjQzNTc4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDY2NTE1NDg4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS80NjY1MTU0ODguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhMzQyNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDY2NTE1NDg4LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDg3NTc5MDkzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS80ODc1NzkwOTMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4N2Y4OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNDg3NTc5MDkzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNTAwNzk3NTAxLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS81MDA3OTc1MDEuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZWYxYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNTAwNzk3NTAxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNTE2NzExMDIwLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS81MTY3MTEwMjAuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxNWUwZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNTE2NzExMDIwLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNjk1NTg0MS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvNjk1NTg0MS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjgxMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS82OTU1ODQxLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvODIzOTYzMjU5LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS84MjM5NjMyNTkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0NTBhZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvODIzOTYzMjU5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvODYzNDYwNjQzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS84NjM0NjA2NDMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmZTVlZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvODYzNDYwNjQzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTA0MDEyMTc5LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS85MDQwMTIxNzkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmN2FiMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTA0MDEyMTc5LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTA4NTY2MTYzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS85MDg1NjYxNjMuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwOGZhZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTA4NTY2MTYzLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTQ2NTU0NDU1LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS85NDY1NTQ0NTUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiYTlkNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTQ2NTU0NDU1LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTgxOTUxNDI0LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS85ODE5NTE0MjQuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzOTc5OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvOTgxOTUxNDI0LmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvYXNzdW1lZEV4dGVybmFsRmlsZXNDYWNoZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvYXNzdW1lZEV4dGVybmFsRmlsZXNDYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFmMzZjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9hc3N1bWVkRXh0ZXJuYWxGaWxlc0NhY2hlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvZXh0ZXJuYWxGaWxlc0NhY2hlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9leHRlcm5hbEZpbGVzQ2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3YWYyOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvZXh0ZXJuYWxGaWxlc0NhY2hlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvZXh0ZXJuYWxMaWJzVGltZVN0YW1wcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvZXh0ZXJuYWxMaWJzVGltZVN0YW1wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDRjNGRjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9leHRlcm5hbExpYnNUaW1lU3RhbXBzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvaW5kZXguZGIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2luZGV4LmRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2luZGV4LmRiCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2luZGV4TmFtZXNNYXAudHh0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9pbmRleE5hbWVzTWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmM2ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9pbmRleE5hbWVzTWFwLnR4dApAQCAtMCwwICsxIEBACitJTkRFWCBWRVJTSU9OIDEuMTMxCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL2phdmFMaWtlTmFtZXMudHh0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9qYXZhTGlrZU5hbWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg2Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9qYXZhTGlrZU5hbWVzLnR4dApAQCAtMCwwICsxIEBACitqYXZhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9ub25DaGFpbmluZ0phcnNDYWNoZSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvbm9uQ2hhaW5pbmdKYXJzQ2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhMjhkOAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvbm9uQ2hhaW5pbmdKYXJzQ2FjaGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qZHQuY29yZS9wYXJ0aWNpcGFudHNJbmRleE5hbWVzLnR4dCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvcGFydGljaXBhbnRzSW5kZXhOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiY2YyNwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvcGFydGljaXBhbnRzSW5kZXhOYW1lcy50eHQKQEAgLTAsMCArMSw1IEBACitJTkRFWCBWRVJTSU9OIDEuMTMxCitGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcLm1ldGFkYXRhXC5wbHVnaW5zXG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZVxqc3BzZWFyY2hcMjUxNDc2MTM2OS5pbmRleAorXGdsZW1tXHNyY1xtYWluXHJlc291cmNlcworRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXC5tZXRhZGF0YVwucGx1Z2luc1xvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmVcanNwc2VhcmNoXDI0NTQyNzM1OC5pbmRleAorXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3NhdmVkSW5kZXhOYW1lcy50eHQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3NhdmVkSW5kZXhOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyODBmZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvc2F2ZWRJbmRleE5hbWVzLnR4dApAQCAtMCwwICsxLDcwIEBACitJTkRFWCBWRVJTSU9OIDEuMTMxK0M6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXNcLm1ldGFkYXRhXC5wbHVnaW5zXG9yZy5lY2xpcHNlLmpkdC5jb3JlCiszNTM0MTQ2NDA0LmluZGV4CiszMTQ5NzQ3OTgzLmluZGV4CisyODA2MzM1MC5pbmRleAorMzM0NDM2MDYwNy5pbmRleAorMjczMTM1MTEwMy5pbmRleAorMTMxNjkyMTQzNS5pbmRleAorMTc0NzY4MjgxNC5pbmRleAorMTkwOTg4MDUxOC5pbmRleAorMzk0NjA1ODQ3NC5pbmRleAorOTA0MDEyMTc5LmluZGV4Cis2OTU1ODQxLmluZGV4CisxMzE5OTcwNTUuaW5kZXgKKzEyMjcxMDgzMDguaW5kZXgKKzMyMjMxOTI3NjguaW5kZXgKKzE1MDA2MDA4NjEuaW5kZXgKKzI5NTg5MzUzMTYuaW5kZXgKKzI2NTY5NTIzODkuaW5kZXgKKzIyNDQzODcwNTcuaW5kZXgKKzEzOTU5NDg5MDAuaW5kZXgKKzI4NzQ4NDkxNTYuaW5kZXgKKzM1ODc5Mjg3MzEuaW5kZXgKKzIzODgyMTI1NzEuaW5kZXgKKzM4NDUwNDU4MjIuaW5kZXgKKzMwNzg5ODYyMy5pbmRleAorMTA3ODE2ODE0MS5pbmRleAorMjM1MDQ4ODUyNi5pbmRleAorOTQ2NTU0NDU1LmluZGV4CisyOTQzODUxOTY1LmluZGV4CiszOTE3MzQ3OTU3LmluZGV4Cis4NjM0NjA2NDMuaW5kZXgKKzEwOTY4NTk1NzAuaW5kZXgKKzM3MzczMTQ2NzIuaW5kZXgKKzE5NTg1NzQ1MjUuaW5kZXgKKzM2MDkzMDQ0MjMuaW5kZXgKKzMyNTE3NjkyNzMuaW5kZXgKKzI4MTUwMTMzODguaW5kZXgKKzMxNDA3MDE3MDAuaW5kZXgKKzM0NDkyMjIwMzMuaW5kZXgKKzI0MDY5OTQwMS5pbmRleAorMTg5Nzk1NDc4OS5pbmRleAorNDY2NTE1NDg4LmluZGV4CiszMTM0MjEzNTA2LmluZGV4Cis4MjM5NjMyNTkuaW5kZXgKKzMxNTI3MzkzMzkuaW5kZXgKKzE1OTE0MDM4MDguaW5kZXgKKzQxMzY0MzU3OC5pbmRleAorMzQxMjYzOTU0LmluZGV4CisxOTgzMDYwNDk4LmluZGV4CisxMTI4ODM2MTMyLmluZGV4Cis5ODE5NTE0MjQuaW5kZXgKKzIwNjg4OTMzOC5pbmRleAorMzA4NjU3NjIwNS5pbmRleAorMTA4NTAzODM2Ni5pbmRleAorNTE2NzExMDIwLmluZGV4CiszNDE2MzM4NDc1LmluZGV4CisyMDUwMjcwNjY5LmluZGV4CisxMjU5NTE4MjM3LmluZGV4Cis1MDA3OTc1MDEuaW5kZXgKKzE1MDUyNzAyOTYuaW5kZXgKKzE0ODcxMjgwMjUuaW5kZXgKKzM5MDAzOTc1MzkuaW5kZXgKKzI3MDY3OTkxNjEuaW5kZXgKKzI2NDI2NDkyNTkuaW5kZXgKKzQ4NzU3OTA5My5pbmRleAorMjI3NzE0NDE4LmluZGV4Cis5MDg1NjYxNjMuaW5kZXgKKzM1Mjg4NjUxMzcuaW5kZXgKKzIwMjc3NjM3NDUuaW5kZXgKKzIwMDI0NTgyMjEuaW5kZXgKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmNvcmUvdmFyaWFibGVzQW5kQ29udGFpbmVycy5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3ZhcmlhYmxlc0FuZENvbnRhaW5lcnMuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTRmZTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5jb3JlL3ZhcmlhYmxlc0FuZENvbnRhaW5lcnMuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzExNDkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxpdGVtIHZhbHVlPSI4MiIga2V5PSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuanJlX3ByZWZlcmVuY2VfcGFnZV9jb250ZXh0LmNvbHVtbldpZHRoMiIvPgorCTxpdGVtIHZhbHVlPSIxIiBrZXk9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5qcmVfcHJlZmVyZW5jZV9wYWdlX2NvbnRleHQuc29ydENvbHVtbiIvPgorCTxpdGVtIHZhbHVlPSIxODgiIGtleT0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmpyZV9wcmVmZXJlbmNlX3BhZ2VfY29udGV4dC5jb2x1bW5XaWR0aDEiLz4KKwk8aXRlbSB2YWx1ZT0iMTE1IiBrZXk9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5qcmVfcHJlZmVyZW5jZV9wYWdlX2NvbnRleHQuY29sdW1uV2lkdGgwIi8+CisJPHNlY3Rpb24gbmFtZT0iY29uZGl0aW9uSGlzdG9yeSI+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5NQUlOX01FVEhPRF9TRUxFQ1RJT05fRElBTE9HIj4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iU2hvd1N0YXR1c0xpbmUiLz4KKwkJPGl0ZW0gdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmI3gwRDsmI3gwQTsmbHQ7SGlzdG9yeSZndDsmI3gwRDsmI3gwQTsmbHQ7aGlzdG9yeVJvb3ROb2RlJmd0OyYjeDBEOyYjeDBBOyZsdDtpbmZvTm9kZSZndDs9VGVzdHMvc3JjJmFtcDtsdDt0ZXN0e1Rlc3RKc29uLmphdmFbVGVzdEpzb24mbHQ7L2luZm9Ob2RlJmd0OyYjeDBEOyYjeDBBOyZsdDsvaGlzdG9yeVJvb3ROb2RlJmd0OyYjeDBEOyYjeDBBOyZsdDsvSGlzdG9yeSZndDsiIGtleT0iSGlzdG9yeSIvPgorCQk8c2VjdGlvbiBuYW1lPSJEaWFsb2dCb3VuZHNTZXR0aW5ncyI+CisJCQk8aXRlbSB2YWx1ZT0iNjAwIiBrZXk9IkRJQUxPR19XSURUSCIvPgorCQkJPGl0ZW0gdmFsdWU9IjF8U2Vnb2UgVUl8OS4wfDB8V0lORE9XU3wxfC0xMnwwfDB8MHw0MDB8MHwwfDB8MXwwfDB8MHwwfFNlZ29lIFVJIiBrZXk9IkRJQUxPR19GT05UX05BTUUiLz4KKwkJCTxpdGVtIHZhbHVlPSI1MDAiIGtleT0iRElBTE9HX0hFSUdIVCIvPgorCQkJPGl0ZW0gdmFsdWU9IjY2OCIga2V5PSJESUFMT0dfWF9PUklHSU4iLz4KKwkJCTxpdGVtIHZhbHVlPSIxOTUiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+CisJCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLkV4cHJlc3Npb25JbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yJEV4cHJlc3Npb25JbmZvcm1hdGlvbkNvbnRyb2wiPgorCQk8aXRlbSB2YWx1ZT0iNTAwIiBrZXk9IlNhc2hXZWlnaHRUcmVlIi8+CisJCTxpdGVtIHZhbHVlPSI1MDAiIGtleT0iU2FzaFdlaWdodERldGFpbHMiLz4KKwkJPGl0ZW0gdmFsdWU9IjYxNCIga2V5PSJXSURUSCIvPgorCQk8aXRlbSB2YWx1ZT0iMTk0IiBrZXk9IkhFSUdIVCIvPgorCTwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy8uaW5zdGFsbC54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcvLmluc3RhbGwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcvLmluc3RhbGwueG1sCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8ZGlycz4KKzxlbnRyeSBsb2M9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83MyIgc3RhbXA9IjE0NTc1NDU2NzIzNDciLz4KKzxlbnRyeSBsb2M9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NSIgc3RhbXA9IjE0MzE1MjQ5NTUyNTEiLz4KKzxlbnRyeSBsb2M9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzEiIHN0YW1wPSIxNTg1MjE3MzI4NTY2Ii8+Cis8ZW50cnkgbG9jPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcanJlMS44LjBfNzMiIHN0YW1wPSIxNDU1ODcwNjkwMDUwIi8+Cis8L2RpcnM+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcvbGlicmFyeUluZm9zLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy9saWJyYXJ5SW5mb3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MzRmZGUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcvbGlicmFyeUluZm9zLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxsaWJyYXJ5SW5mb3M+Cis8bGlicmFyeUluZm8gaG9tZT0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczIiB2ZXJzaW9uPSIxLjguMF83MyI+Cis8Ym9vdHBhdGg+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczXGpyZVxsaWJccmVzb3VyY2VzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXHJ0LmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXHN1bnJzYXNpZ24uamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczXGpyZVxsaWJcanNzZS5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzNcanJlXGxpYlxqY2UuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczXGpyZVxsaWJcY2hhcnNldHMuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxKYXZhXGpkazEuOC4wXzczXGpyZVxsaWJcamZyLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcY2xhc3NlcyIvPgorPC9ib290cGF0aD4KKzxleHRlbnNpb25EaXJzPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXMgKHg4NilcSmF2YVxqZGsxLjguMF83M1xqcmVcbGliXGV4dCIvPgorPGVudHJ5IHBhdGg9IkM6XFdpbmRvd3NcU3VuXEphdmFcbGliXGV4dCIvPgorPC9leHRlbnNpb25EaXJzPgorPGVuZG9yc2VkRGlycz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXEphdmFcamRrMS44LjBfNzNcanJlXGxpYlxlbmRvcnNlZCIvPgorPC9lbmRvcnNlZERpcnM+Cis8L2xpYnJhcnlJbmZvPgorPGxpYnJhcnlJbmZvIGhvbWU9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NSIgdmVyc2lvbj0iMS44LjBfNDUiPgorPGJvb3RwYXRoPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NVxqcmVcbGliXHJlc291cmNlcy5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxydC5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxzdW5yc2FzaWduLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NVxqcmVcbGliXGpzc2UuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzQ1XGpyZVxsaWJcamNlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NVxqcmVcbGliXGNoYXJzZXRzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF80NVxqcmVcbGliXGpmci5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGNsYXNzZXMiLz4KKzwvYm9vdHBhdGg+Cis8ZXh0ZW5zaW9uRGlycz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfNDVcanJlXGxpYlxleHQiLz4KKzxlbnRyeSBwYXRoPSJDOlxXaW5kb3dzXFN1blxKYXZhXGxpYlxleHQiLz4KKzwvZXh0ZW5zaW9uRGlycz4KKzxlbmRvcnNlZERpcnM+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzQ1XGpyZVxsaWJcZW5kb3JzZWQiLz4KKzwvZW5kb3JzZWREaXJzPgorPC9saWJyYXJ5SW5mbz4KKzxsaWJyYXJ5SW5mbyBob21lPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcamRrMS44LjBfMjMxIiB2ZXJzaW9uPSIxLjguMF8yMzEiPgorPGJvb3RwYXRoPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxyZXNvdXJjZXMuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzIzMVxqcmVcbGliXHJ0LmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxzdW5yc2FzaWduLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxqc3NlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxqY2UuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzIzMVxqcmVcbGliXGNoYXJzZXRzLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxqZnIuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzIzMVxqcmVcY2xhc3NlcyIvPgorPC9ib290cGF0aD4KKzxleHRlbnNpb25EaXJzPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjguMF8yMzFcanJlXGxpYlxleHQiLz4KKzxlbnRyeSBwYXRoPSJDOlxXSU5ET1dTXFN1blxKYXZhXGxpYlxleHQiLz4KKzwvZXh0ZW5zaW9uRGlycz4KKzxlbmRvcnNlZERpcnM+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC4wXzIzMVxqcmVcbGliXGVuZG9yc2VkIi8+Cis8L2VuZG9yc2VkRGlycz4KKzwvbGlicmFyeUluZm8+Cis8bGlicmFyeUluZm8gaG9tZT0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczIiB2ZXJzaW9uPSIxLjguMF83MyI+Cis8Ym9vdHBhdGg+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxyZXNvdXJjZXMuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxydC5qYXIiLz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcanJlMS44LjBfNzNcbGliXHN1bnJzYXNpZ24uamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxqc3NlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xsaWJcamNlLmphciIvPgorPGVudHJ5IHBhdGg9IkM6XFByb2dyYW0gRmlsZXNcSmF2YVxqcmUxLjguMF83M1xsaWJcY2hhcnNldHMuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGxpYlxqZnIuamFyIi8+Cis8ZW50cnkgcGF0aD0iQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpyZTEuOC4wXzczXGNsYXNzZXMiLz4KKzwvYm9vdHBhdGg+Cis8ZXh0ZW5zaW9uRGlycz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcanJlMS44LjBfNzNcbGliXGV4dCIvPgorPGVudHJ5IHBhdGg9IkM6XFdpbmRvd3NcU3VuXEphdmFcbGliXGV4dCIvPgorPC9leHRlbnNpb25EaXJzPgorPGVuZG9yc2VkRGlycz4KKzxlbnRyeSBwYXRoPSJDOlxQcm9ncmFtIEZpbGVzXEphdmFcanJlMS44LjBfNzNcbGliXGVuZG9yc2VkIi8+Cis8L2VuZG9yc2VkRGlycz4KKzwvbGlicmFyeUluZm8+Cis8L2xpYnJhcnlJbmZvcz4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LnVpL09wZW5UeXBlSGlzdG9yeS54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9PcGVuVHlwZUhpc3RvcnkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZWUzY2IKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9PcGVuVHlwZUhpc3RvcnkueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8dHlwZUluZm9IaXN0cm95Lz4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LnVpL1F1YWxpZmllZFR5cGVOYW1lSGlzdG9yeS54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9RdWFsaWZpZWRUeXBlTmFtZUhpc3RvcnkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTk5MDYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9RdWFsaWZpZWRUeXBlTmFtZUhpc3RvcnkueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPHF1YWxpZmllZFR5cGVOYW1lSGlzdHJveT4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS5pby5GaWxlUmVhZGVyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnNxbC5Db25uZWN0aW9uIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnNxbC5Ecml2ZXJNYW5hZ2VyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnNxbC5TdGF0ZW1lbnQiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuc3FsLlJlc3VsdFNldCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXgud3MucnMuUXVlcnlQYXJhbSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXgud3MucnMuRGVmYXVsdFZhbHVlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnNxbC5QcmVwYXJlZFN0YXRlbWVudCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS50aW1lLkxvY2FsRGF0ZVRpbWUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5Mb2NhbGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LnhtbC53cy5SZXNwb25zZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXgud3MucnMuY29yZS5SZXNwb25zZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LnhtbC5iaW5kLmFubm90YXRpb24uWG1sVHlwZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxBY2Nlc3NvclR5cGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5FbnVtZXJhdGlvbiIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YXguc2VydmxldC5TZXJ2bGV0SW5wdXRTdHJlYW0iLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLkpzb25QYXJzZXIiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLkpzb25Ub2tlbiIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmUuSnNvbkZhY3RvcnkiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5JdGVyYXRvciIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLm5vZGUuQXJyYXlOb2RlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uRmlsZSIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iZGUua29yYXAuanNvbi5Kc29uVHJhdmVyc2UiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEudXRpbC5MaXN0Ii8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnV0aWwuQXJyYXlMaXN0Ii8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQubm9kZS5PYmplY3ROb2RlIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJkZS5rb3JhcC5zZXJ2aWNlcy5HbGVtbUNsaWVudCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50LkdsZW1tQ2xpZW50Ii8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJkZS5rb3JhcC5zZXJ2aWNlcy53Zm9ybVJld3JpdGUiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uSW5wdXRTdHJlYW0iLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uRmlsZUlucHV0U3RyZWFtIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLm5pby5maWxlLkZpbGVzIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLm5pby5maWxlLlBhdGgiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEubmlvLmZpbGUuUGF0aHMiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uQnVmZmVyZWRSZWFkZXIiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXIiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImRlLmtvcmFwLnNlcnZpY2VzLkxlbW1hUmVzcG9uc2UiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnV0aWwubG9nZ2luZy5MZXZlbCIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS51dGlsLkhhc2hNYXAiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImRlLmtvcmFwLnNlcnZpY2VzLkdsZW1tU2VydmljZXMiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9Im9yZy5vbWcuSU9QLkVuY29kaW5nIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlLlN0YXR1cyIvPgorPGZ1bGx5UXVhbGlmaWVkVHlwZU5hbWUgbmFtZT0iamF2YS51dGlsLlByb3BlcnRpZXMiLz4KKzxmdWxseVF1YWxpZmllZFR5cGVOYW1lIG5hbWU9ImRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLmlvLlByaW50U3RyZWFtIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIi8+Cis8ZnVsbHlRdWFsaWZpZWRUeXBlTmFtZSBuYW1lPSJkZS5rb3JhcC5zZXJ2aWNlcy5HbGVtbURCIi8+Cis8L3F1YWxpZmllZFR5cGVOYW1lSGlzdHJveT4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuamR0LnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTBkMjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpkdC51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMTExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8aXRlbSB2YWx1ZT0iSmF2YVNFLTEuOCIga2V5PSJvcmcuZWNsaXBzZS5qZHQudWkubGFzdC5zZWxlY3RlZC5leGVjdXRpb24uZW52aXJvbWVudCIvPgorCTxpdGVtIHZhbHVlPSIzIiBrZXk9IlR5cGVIaWVyYXJjaHlWaWV3UGFydC5vcmllbnRhdGlvbiIvPgorCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJUeXBlSGllcmFyY2h5Vmlld1BhcnQubGlua2VkaXRvcnMiLz4KKwk8aXRlbSB2YWx1ZT0iMiIga2V5PSJDYWxsSGllcmFyY2h5Vmlld1BhcnQuZmllbGRfbW9kZSIvPgorCTxpdGVtIHZhbHVlPSIyIiBrZXk9IlR5cGVIaWVyYXJjaHlWaWV3UGFydC5oaWVyYXJjaHl2aWV3Ii8+CisJPGl0ZW0gdmFsdWU9IjUwMCIga2V5PSJDYWxsSGllcmFyY2h5Vmlld1BhcnQucmF0aW8xIi8+CisJPGl0ZW0gdmFsdWU9IjEiIGtleT0iU2VhcmNoU2NvcGVBY3Rpb25Hcm91cC5zZWFyY2hfc2NvcGVfdHlwZSIvPgorCTxpdGVtIHZhbHVlPSI1MDAiIGtleT0iQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0LnJhdGlvMyIvPgorCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJUeXBlSGllcmFyY2h5Vmlld1BhcnQucXVhbGlmaWVkbmFtZXMiLz4KKwk8aXRlbSB2YWx1ZT0iMCIga2V5PSJDYWxsSGllcmFyY2h5Vmlld1BhcnQuY2FsbF9tb2RlIi8+CisJPGl0ZW0gdmFsdWU9IkM6XFVzZXJzXEZyYW5ja1wubTJccmVwb3NpdG9yeVxkZVxrb3JhcFxqc29uXEpzb25UcmF2ZXJzZVwwLjEtU05BUFNIT1QiIGtleT0ib3JnLmVjbGlwc2UuamR0LnVpLmxhc3RleHRqYXIiLz4KKwk8aXRlbSB2YWx1ZT0iZmlsdGVyX2ltcG9ydHM7IiBrZXk9ImZpbHRlcnNfbGFzdF91c2VkIi8+CisJPGl0ZW0gdmFsdWU9IjMiIGtleT0iQ2FsbEhpZXJhcmNoeVZpZXdQYXJ0Lm9yaWVudGF0aW9uIi8+CisJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjIiBrZXk9Im9yZy5lY2xpcHNlLmpkdC51aS5sYXN0LmV4dGVybmFsLnByb2plY3QiLz4KKwk8bGlzdCBrZXk9IlNlYXJjaFNjb3BlQWN0aW9uR3JvdXAud29ya2luZ19zZXQiPgorCTwvbGlzdD4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3Jpbmcuc2V0dGluZ3MiPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0idXBkYXRlUXVhbGlmaWVkTmFtZXMiLz4KKwkJPGl0ZW0gdmFsdWU9IioiIGtleT0icGF0dGVybnMiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9InVwZGF0ZVNpbWlsYXJFbGVtZW50cyIvPgorCQk8aXRlbSB2YWx1ZT0iMSIga2V5PSJ1cGRhdGVTaW1pbGFyRWxlbWVudHNNYXRjaFN0cmF0ZWd5Ii8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJ1cGRhdGVUZXh0dWFsTWF0Y2hlcyIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJQcm9ibGVtU2V2ZXJpdGllc0NvbmZpZ3VyYXRpb25CbG9jayI+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDIiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImV4cGFuZGVkMSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZXhwYW5kZWQ0Ii8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDMiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImV4cGFuZGVkNiIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZXhwYW5kZWQ1Ii8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDgiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImV4cGFuZGVkNyIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJleHBhbmRlZDAiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iU2VhcmNoSW5EaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJTZWFyY2hJblByb2plY3RzIi8+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9IlNlYXJjaEluQXBwTGlicyIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJTZWFyY2hJbkpSRSIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJTZWFyY2hJblNvdXJjZXMiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnBhY2thZ2V2aWV3LlBhY2thZ2VFeHBsb3JlclBhcnQiPgorCQk8aXRlbSB2YWx1ZT0iMiIga2V5PSJsYXlvdXQiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iZ3JvdXBfbGlicmFyaWVzIi8+CisJCTxpdGVtIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O3BhY2thZ2VFeHBsb3JlciBncm91cF9saWJyYXJpZXM9JnF1b3Q7MSZxdW90OyBsYXlvdXQ9JnF1b3Q7MiZxdW90OyBsaW5rV2l0aEVkaXRvcj0mcXVvdDswJnF1b3Q7IHJvb3RNb2RlPSZxdW90OzEmcXVvdDsgd29ya2luZ1NldE5hbWU9JnF1b3Q7QWdncmVnYXRlIGZvciB3aW5kb3cgMTU3MzU1ODAwODM2NyZxdW90OyZndDsmI3gwRDsmI3gwQTsmbHQ7Y3VzdG9tRmlsdGVycyB1c2VyRGVmaW5lZFBhdHRlcm5zRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90OyZndDsmI3gwRDsmI3gwQTsmbHQ7eG1sRGVmaW5lZEZpbHRlcnMmZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuU3RhdGljc0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5idWlsZHNoaXAudWkucGFja2FnZWV4cGxvcmVyLmZpbHRlci5ncmFkbGUuYnVpbGRmb2xkZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5teWx5bi5qYXZhLnVpLk1lbWJlcnNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25KYXZhUHJvamVjdHNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlcl9wYXR0ZXJuRmlsdGVySWRfLiomcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLk5vblNoYXJlZFByb2plY3RzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuU3ludGhldGljTWVtYmVyc0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7dHJ1ZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuQ29udGFpbmVkTGlicmFyeUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUGFja2FnZUV4cGxvcmVyLkhpZGVJbm5lckNsYXNzRmlsZXNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUGFja2FnZUV4cGxvcmVyLkVtcHR5SW5uZXJQYWNrYWdlRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UubTJlLk1hdmVuTW9kdWxlRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmJ1aWxkc2hpcC51aS5wYWNrYWdlZXhwbG9yZXIuZmlsdGVyLmdyYWRsZS5zdWJQcm9qZWN0JnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5DbG9zZWRQcm9qZWN0c0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkRlcHJlY2F0ZWRNZW1iZXJzRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDtmYWxzZSZxdW90Oy8mZ3Q7JiN4MEQ7JiN4MEE7Jmx0O2NoaWxkIGZpbHRlcklkPSZxdW90O29yZy5lY2xpcHNlLmpkdC51aS5QYWNrYWdlRXhwbG9yZXIuRW1wdHlMaWJyYXJ5Q29udGFpbmVyRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5QYWNrYWdlRGVjbGFyYXRpb25GaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O3RydWUmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkltcG9ydERlY2xhcmF0aW9uRmlsdGVyJnF1b3Q7IGlzRW5hYmxlZD0mcXVvdDt0cnVlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5Ob25KYXZhRWxlbWVudEZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkxpYnJhcnlGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5DdUFuZENsYXNzRmlsZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuUGFja2FnZUV4cGxvcmVyLkVtcHR5UGFja2FnZUZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLk5vblB1YmxpY0ZpbHRlciZxdW90OyBpc0VuYWJsZWQ9JnF1b3Q7ZmFsc2UmcXVvdDsvJmd0OyYjeDBEOyYjeDBBOyZsdDtjaGlsZCBmaWx0ZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQudWkuUGFja2FnZUV4cGxvcmVyLkxvY2FsVHlwZXNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7Y2hpbGQgZmlsdGVySWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LnVpLlBhY2thZ2VFeHBsb3Jlci5GaWVsZHNGaWx0ZXImcXVvdDsgaXNFbmFibGVkPSZxdW90O2ZhbHNlJnF1b3Q7LyZndDsmI3gwRDsmI3gwQTsmbHQ7L3htbERlZmluZWRGaWx0ZXJzJmd0OyYjeDBEOyYjeDBBOyZsdDsvY3VzdG9tRmlsdGVycyZndDsmI3gwRDsmI3gwQTsmbHQ7L3BhY2thZ2VFeHBsb3JlciZndDsiIGtleT0ibWVtZW50byIvPgorCQk8aXRlbSB2YWx1ZT0iMSIga2V5PSJyb290TW9kZSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0ibGlua1dpdGhFZGl0b3IiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTmV3Q2xhc3NXaXphcmRQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImNyZWF0ZV9jb25zdHJ1Y3RvciIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJjcmVhdGVfdW5pbXBsZW1lbnRlZCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJPcHRpb25hbE1lc3NhZ2VEaWFsb2cuaGlkZS4iPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJvcmcuZWNsaXBzZS5qZHQudWkudHlwZWNvbW1lbnQuZGVwcmVjYXRlZCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJSZWZhY3RvcmluZ1dpemFyZC5wcmV2aWV3Ij4KKwkJPGl0ZW0gdmFsdWU9IjYwMCIga2V5PSJ3aWR0aCIvPgorCQk8aXRlbSB2YWx1ZT0iNDAwIiBrZXk9ImhlaWdodCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJDYWxsSGllcmFyY2h5U2VhcmNoU2NvcGUiPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud2l6YXJkcy5idWlsZHBhdGhzLk5ld1ZhcmlhYmxlRW50cnlEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0iNTc3IiBrZXk9IkRJQUxPR19XSURUSCIvPgorCQk8aXRlbSB2YWx1ZT0iMXxTZWdvZSBVSXw5LjB8MHxXSU5ET1dTfDF8LTEyfDB8MHwwfDQwMHwwfDB8MHwxfDB8MHwwfDB8U2Vnb2UgVUkiIGtleT0iRElBTE9HX0ZPTlRfTkFNRSIvPgorCQk8aXRlbSB2YWx1ZT0iMzk4IiBrZXk9IkRJQUxPR19IRUlHSFQiLz4KKwkJPGl0ZW0gdmFsdWU9Ijc4IiBrZXk9IkRJQUxPR19YX09SSUdJTiIvPgorCQk8aXRlbSB2YWx1ZT0iODQiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkphdmFCdWlsZENvbmZpZ3VyYXRpb25CbG9jayI+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJleHBhbmRlZDIiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImV4cGFuZGVkMSIvPgorCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJleHBhbmRlZDAiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iQnJlYWRjcnVtYkl0ZW1Ecm9wRG93biI+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkNsYXNzcGF0aENvbnRhaW5lclNlbGVjdGlvblBhZ2UiPgorCQk8aXRlbSB2YWx1ZT0iNiIga2V5PSJpbmRleCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJCdWlsZFBhdGhzUHJvcGVydHlQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9IjEiIGtleT0icGFnZUluZGV4Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9InF1aWNrX2Fzc2lzdF9wcm9wb3NhbF9zaXplIj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTmV3UGFja2FnZVdpemFyZFBhZ2UiPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iY3JlYXRlX3BhY2thZ2VfaW5mb19qYXZhIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IkphdmFTZWFyY2hQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9IjEiIGtleT0iSElTVE9SWV9TSVpFIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJDQVNFX1NFTlNJVElWRSIvPgorCQk8aXRlbSB2YWx1ZT0iMTUiIGtleT0iSU5DTFVERV9NQVNLIi8+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkwIj4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc0Nhc2VTZW5zaXRpdmUiLz4KKwkJCTxpdGVtIHZhbHVlPSIiIGtleT0iamF2YUVsZW1lbnQiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMTUiIGtleT0iaW5jbHVkZU1hc2siLz4KKwkJCTxpdGVtIHZhbHVlPSJHbGVtbTIiIGtleT0icGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9IjIiIGtleT0ibGltaXRUbyIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ibWF0Y2hMb2NhdGlvbnMiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNlYXJjaEZvciIvPgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iY29tcGxldGlvbl9wcm9wb3NhbF9zaXplIj4KKwkJPGl0ZW0gdmFsdWU9IjIyNSIga2V5PSJzaXplLnkiLz4KKwkJPGl0ZW0gdmFsdWU9IjQ2MyIga2V5PSJzaXplLngiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iSmF2YUVsZW1lbnRTZWFyY2hBY3Rpb25zIj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qMmVlLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qMmVlLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliODE4NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmoyZWUudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxsaXN0IGtleT0iTVJVX1JVTlRJTUVfU1RPUkUiPgorCQk8aXRlbSB2YWx1ZT0iQXBhY2hlIFRvbWNhdCB2OS4wIi8+CisJCTxpdGVtIHZhbHVlPSJOVUxMX1JVTlRJTUUiLz4KKwkJPGl0ZW0gdmFsdWU9IkoyRUUgUnVudGltZSBMaWJyYXJ5Ii8+CisJPC9saXN0PgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIvd2ViTGlicmFyaWVzQ2FjaGUuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi93ZWJMaWJyYXJpZXNDYWNoZS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWNjNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIvd2ViTGlicmFyaWVzQ2FjaGUuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuajJlZS9lYXJMaWJyYXJpZXNDYWNoZS5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmoyZWUvZWFyTGlicmFyaWVzQ2FjaGUuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmYjAyMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmoyZWUvZWFyTGlicmFyaWVzQ2FjaGUuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvY2xvc2UuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvY2xvc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTJlMjgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy9jbG9zZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvbGlzdC1idWxsZXQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvbGlzdC1idWxsZXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMGNmNGYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy9saXN0LWJ1bGxldC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvbG9nby1kYXJrLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2xvZ28tZGFyay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0NTBlMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL2xvZ28tZGFyay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3QtZGVzZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWJvdC1kZXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVjODM0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3QtZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3QtZW5kLXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LWVuZC1zZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjOWVlYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LWVuZC1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3QtbWlkLXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LW1pZC1zZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiMGM5NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtYm90LW1pZC1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3Qtc3RhcnQtc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1ib3Qtc3RhcnQtc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDYzY2UKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWJvdC1zdGFydC1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtZGVzZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWVuZC1kZXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQxN2UxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTYyOTkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWVuZC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtam9pbi1zZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmMzNlMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtZW5kLWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1lbmQtc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNmIzOTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLWVuZC1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1taWQtZGVzZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLW1pZC1kZXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM5NTU4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1taWQtZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1taWQtc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1taWQtc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OGRlOTgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLW1pZC1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1kZXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtZGVzZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5MDRjMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LWpvaW4tZGVzZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMyZDNmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzJkM2YKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1qb2luLXNlbGVjdGVkLmdpZiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlYmM3MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1zZWxlY3RlZC5naWYgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc2YuYXBhY2hlLnRyaW5pZGFkLnRhZ3N1cHBvcnQvZHRSZXpQcm92Q2FjaGUvbXlmYWNlcy5hcGFjaGUub3JnX3RyaW5pZGFkL3NraW5uaW5nL2ltYWdlcy90YWIzLXN0YXJ0LXNlbGVjdGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGEyNjBiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9pbWFnZXMvdGFiMy1zdGFydC1zZWxlY3RlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9taW5pbWFsLmNzcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvbWluaW1hbC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmZTdjZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvbWluaW1hbC5jc3MKQEAgLTAsMCArMSwyNDMgQEAKKy8qIFRoaXMgQ1NTIGZpbGUgZ2VuZXJhdGVkIG9uIFRodSBBcHIgMDIgMTU6NDc6NDQgUERUIDIwMDkgKi8KKy5BRkluc3RydWN0aW9uVGV4dCwuQUZGaWVsZFRleHQsLmFmX291dHB1dFRleHQsLmFmX291dHB1dEZvcm1hdHRlZCwuYWZfb3V0cHV0RG9jdW1lbnQsLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQsLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCwuYWZfaW5wdXRDb2xvcl9jb250ZW50LC5hZl9pbnB1dERhdGVfY29udGVudCwuYWZfaW5wdXRMaXN0T2ZWYWx1ZXNfY29udGVudCwuYWZfc2VsZWN0TWFueUNoZWNrYm94X2NvbnRlbnQsLmFmX3NlbGVjdE1hbnlMaXN0Ym94X2NvbnRlbnQsLmFmX3NlbGVjdE9uZUNob2ljZV9jb250ZW50LC5hZl9zZWxlY3RPbmVMaXN0Ym94X2NvbnRlbnQsLmFmX3NlbGVjdE9uZVJhZGlvX2NvbnRlbnQsLmFmX2lucHV0VGV4dC5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQuQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQuQUZQaG9uZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5BRlBvc3RhbENvZGVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQuQUZBZGRyZXNzRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRDaG9pY2UuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UuQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLkFGUGhvbmVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLkFGUG9zdGFsQ29kZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UuQUZBZGRyZXNzRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dE51bWJlclNwaW5ib3guQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9jb250ZW50LC5hZl9pbnB1dE51bWJlclNwaW5ib3gucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCwuYWZfaW5wdXROdW1iZXJTcGluYm94LkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCwuQUZGaWVsZFRleHRMVFIsLkFGUGhvbmVGaWVsZFRleHQsLkFGUG9zdGFsQ29kZUZpZWxkVGV4dCwuQUZBZGRyZXNzRmllbGRUZXh0LC5Qb3J0bGV0VGV4dDEsLlBvcnRsZXRUZXh0MiwuUG9ydGxldFRleHQzLC5Qb3J0bGV0VGV4dDQsLnBvcnRsZXQtZm9ybS1pbnB1dC1maWVsZCwucG9ydGxldC1mb3JtLWZpZWxkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDB9CisuQUZJbnN0cnVjdGlvblRleHREaXNhYmxlZCwuQUZGaWVsZFRleHREaXNhYmxlZCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZQaG9uZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZQb3N0YWxDb2RlRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRkFkZHJlc3NGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZC5BRlBob25lRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZQb3N0YWxDb2RlRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZBZGRyZXNzRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dE51bWJlclNwaW5ib3gucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCwucF9JbkNvbnRleHRCcmFuZGluZ1RleHQsLkFGRmllbGRUZXh0TFRSRGlzYWJsZWQsLkFGUGhvbmVGaWVsZFRleHREaXNhYmxlZCwuQUZQb3N0YWxDb2RlRmllbGRUZXh0RGlzYWJsZWQsLkFGQWRkcmVzc0ZpZWxkVGV4dERpc2FibGVkLC5PcmFIR3JpZE5hdlJvd0luYWN0aXZlTGluaywuT3JhTmF2QmFySW5hY3RpdmVMaW5rLC5wb3J0bGV0LWZvbnQtZGltIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM5OTk5OTl9CisuQUZEYXRhVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzAwMDAwMH0KKy5BRkRhdGFUZXh0RGlzYWJsZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiM5OTk5OTl9CisuQUZEYXRhTnVtYmVyIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMDAwMDAwO3RleHQtYWxpZ246cmlnaHR9CisuQUZEYXRhTnVtYmVyRGlzYWJsZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiM5OTk5OTk7dGV4dC1hbGlnbjpyaWdodH0KKy5BRkZpZWxkTnVtYmVyLC5hZl9pbnB1dFRleHQuQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0Q2hvaWNlLkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiMwMDAwMDB9CisuQUZGaWVsZE51bWJlckRpc2FibGVkLC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXROdW1iZXJTcGluYm94LnBfQUZEaXNhYmxlZC5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiM5OTk5OTl9CisuQUZMYWJlbFRleHQsLmFmX291dHB1dExhYmVsLC5hZl9pbnB1dENob2ljZV9sYWJlbCwuYWZfaW5wdXRGaWxlX2xhYmVsLC5hZl9pbnB1dE51bWJlclNwaW5ib3hfbGFiZWwsLmFmX2lucHV0VGV4dF9sYWJlbCwuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94X2xhYmVsLC5hZl9zZWxlY3RCb29sZWFuUmFkaW9fbGFiZWwsLmFmX2lucHV0Q29sb3JfbGFiZWwsLmFmX2lucHV0RGF0ZV9sYWJlbCwuYWZfaW5wdXRMaXN0T2ZWYWx1ZXNfbGFiZWwsLmFmX3NlbGVjdE1hbnlDaGVja2JveF9sYWJlbCwuYWZfc2VsZWN0TWFueUxpc3Rib3hfbGFiZWwsLmFmX3NlbGVjdE9uZUNob2ljZV9sYWJlbCwuYWZfc2VsZWN0T25lTGlzdGJveF9sYWJlbCwuYWZfc2VsZWN0T25lUmFkaW9fbGFiZWwsLmFmX3BhbmVsTGFiZWxBbmRNZXNzYWdlX2xhYmVsLC5hZl9wYW5lbEZvcm1MYXlvdXRfbGFiZWwtY2VsbCwucG9ydGxldC1mb3JtLWxhYmVsLC5wb3J0bGV0LWljb24tbGFiZWwsLnBvcnRsZXQtZGxnLWljb24tbGFiZWwsLnBvcnRsZXQtZm9ybS1maWVsZC1sYWJlbCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzAwMDAwMDtwYWRkaW5nOjBweCA4cHggMHB4IDBweDtmb250LXdlaWdodDpub3JtYWx9CisuQUZMYWJlbENlbGwge3BhZGRpbmc6MHB4IDhweCAwcHggMHB4fQorLkFGRXJyb3JJY29uU3R5bGUge2NvbG9yOiNjYzAwMDA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtd2VpZ2h0OmJvbGR9CisuQUZJbmZvSWNvblN0eWxlLC5BRldhcm5pbmdJY29uU3R5bGUsLkFGUXVpY2tTZWxlY3RJY29uU3R5bGUge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtd2VpZ2h0OmJvbGR9CisuQUZSZXF1aXJlZEljb25TdHlsZSB7Y29sb3I6IzY2OTk2Njtmb250LWZhbWlseTpDb3VyaWVyLHNhbnMtc2VyaWZ9CisuQUZRdWlja1NlbGVjdERpc2FibGVkSWNvblN0eWxlIHtjb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXdlaWdodDpib2xkfQorLk9yYUxpbms6bGluaywuYWZfdHJlZVRhYmxlX3BhdGgsLmFmX21lbnVQYXRoLC5hZl9wYW5lbExpc3QgQSwuYWZfcGFuZWxQb3B1cF9saW5rLC5PcmFMaW5rVGV4dCwuT3JhSEdyaWROYXZSb3dBY3RpdmVMaW5rLC5PcmFOYXZCYXJBY3RpdmVMaW5rIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDMzMzN9CisuT3JhTGluazphY3RpdmUsLk9yYUFMaW5rVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDA2NjY2fQorLk9yYUxpbms6dmlzaXRlZCwuT3JhVkxpbmtUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMzMzY2NjZ9CisuT3JhTGlua0Rpc2FibGVkLC5hZl9vdXRwdXRMYWJlbF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9pbnB1dENob2ljZV9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9pbnB1dE51bWJlclNwaW5ib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfaW5wdXRUZXh0X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdEJvb2xlYW5DaGVja2JveF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RCb29sZWFuUmFkaW9fcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfaW5wdXREYXRlX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdE1hbnlDaGVja2JveF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RNYW55TGlzdGJveF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RPbmVDaG9pY2VfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lTGlzdGJveF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RPbmVSYWRpb19yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9vdXRwdXRMYWJlbF9ncm91cC1pY29uLXN0eWxlLC5hZl9pbnB1dENob2ljZV9ncm91cC1pY29uLXN0eWxlLC5hZl9pbnB1dE51bWJlclNwaW5ib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfaW5wdXRUZXh0X2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdEJvb2xlYW5DaGVja2JveF9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RCb29sZWFuUmFkaW9fZ3JvdXAtaWNvbi1zdHlsZSwuYWZfaW5wdXREYXRlX2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdE1hbnlDaGVja2JveF9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RNYW55TGlzdGJveF9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RPbmVDaG9pY2VfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lTGlzdGJveF9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RPbmVSYWRpb19ncm91cC1pY29uLXN0eWxlLC5hZl9tZW51TGlzdCwuYWZfbmF2aWdhdGlvblBhbmVfY2hvaWNlLWxhYmVsLC5hZl9uYXZpZ2F0aW9uUGFuZV9jaG9pY2Utb3B0aW9ucywuYWZfbmF2aWdhdGlvblBhbmVfY2hvaWNlLWJ1dHRvbiwuYWZfYnJlYWRDcnVtYnMsLmFmX3NlbGVjdE1hbnlTaHV0dGxlX2JveC1jb250ZW50LC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWNvbnRlbnQsLmFmX21lbnVUYWJzLC5hZl9jb21tYW5kQnV0dG9uLC5hZl9nb0J1dHRvbiwuYWZfcmVzZXRCdXR0b24sLnBfT3JhRGlzYWJsZWQsLk9yYU5hdjMsLnBfT3JhVHJlZVJvdywucG9ydGxldC1mb3JtLWJ1dHRvbiB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbH0KKy5hZl9vdXRwdXREb2N1bWVudF90aXRsZSwuQUZIZWFkZXJMZXZlbE9uZSxIMS5hZl9wYW5lbEhlYWRlcixIMS5hZl9zaG93RGV0YWlsSGVhZGVyLC5Qb3J0bGV0SGVhZGVyVGV4dCwuUG9ydGxldEhlYWRpbmcxLC5Qb3J0bGV0U3ViSGVhZGVyVGV4dCwucG9ydGxldC1zZWN0aW9uLWhlYWRlciwucG9ydGxldC1zZWN0aW9uLXN1YmhlYWRlciwucG9ydGxldC10YWJsZS1oZWFkZXIsLnBvcnRsZXQtdGFibGUtc3ViaGVhZGVyIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHQ7Y29sb3I6IzY2OTk2Njtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuYWZfb3V0cHV0RG9jdW1lbnRfcGFyYWdyYXBoIHt0ZXh0LWFsaWduOmp1c3RpZnk7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5hZl9vdXRwdXREb2N1bWVudF9zZXBhcmF0b3Ige3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuYWZfcGFuZWxUaXAsLk9yYVBhZ2VTdGFtcFRleHQsLmFmX3NpbmdsZVN0ZXBCdXR0b25CYXJfbGFiZWwsLk9yYU5hdkJhclZpZXdPbmx5IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjZ9CisuYWZfcGFuZWxUaXBfbGFiZWwge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkfQorLmFmX3BhbmVsQWNjb3JkaW9uX3Rvb2xiYXIsLnBfT3JhQ29udGVudEZvb3RlckNoaWxkcmVuIHtmbG9hdDpyaWdodH0KKy5hZl9kaWFsb2dfY29udGFpbmVyLC5hZl9wYW5lbFBvcHVwX2NvbnRhaW5lciB7Ym9yZGVyLWNvbG9yOiMzMzY2MzM7Ym9yZGVyOjFweCBzb2xpZDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlfQorLmFmX2RpYWxvZ190aXRsZS1iYXIsLmFmX3BhbmVsUG9wdXBfdGl0bGUtYmFyIHtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Ym9yZGVyLWNvbG9yOiMzMzY2MzM7Ym9yZGVyLWJvdHRvbToxcHggc29saWQ7cGFkZGluZzoycHggMnB4IDJweCAycHh9CisuYWZfZGlhbG9nX3RpdGxlLXRleHQsLmFmX3BhbmVsUG9wdXBfdGl0bGUtdGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufQorLmFmX2RpYWxvZ19jbG9zZS1pY29uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO21hcmdpbi1sZWZ0OjVweDtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvY2xvc2UuZ2lmKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7aGVpZ2h0OjEzcHg7d2lkdGg6MTNweH0KKy5hZl9kaWFsb2dfY29udGVudCwuYWZfcGFuZWxQb3B1cF9jb250ZW50IHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyOjBweH0KKy5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQgLmFmX2lucHV0Q2hvaWNlX2xhYmVsLC5hZl9pbnB1dE51bWJlclNwaW5ib3gucF9BRkRpc2FibGVkIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfbGFiZWwsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQgLmFmX2lucHV0VGV4dF9sYWJlbCwuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94LnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0Qm9vbGVhbkNoZWNrYm94X2xhYmVsLC5hZl9zZWxlY3RCb29sZWFuUmFkaW8ucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RCb29sZWFuUmFkaW9fbGFiZWwsLmFmX2lucHV0Q29sb3IucF9BRkRpc2FibGVkIC5hZl9pbnB1dENvbG9yX2xhYmVsLC5hZl9pbnB1dERhdGUucF9BRkRpc2FibGVkIC5hZl9pbnB1dERhdGVfbGFiZWwsLmFmX2lucHV0TGlzdE9mVmFsdWVzLnBfQUZEaXNhYmxlZCAuYWZfaW5wdXRMaXN0T2ZWYWx1ZXNfbGFiZWwsLmFmX3NlbGVjdE1hbnlDaGVja2JveC5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdE1hbnlDaGVja2JveF9sYWJlbCwuYWZfc2VsZWN0TWFueUxpc3Rib3gucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RNYW55TGlzdGJveF9sYWJlbCwuYWZfc2VsZWN0T25lQ2hvaWNlLnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0T25lQ2hvaWNlX2xhYmVsLC5hZl9zZWxlY3RPbmVMaXN0Ym94LnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0T25lTGlzdGJveF9sYWJlbCwuYWZfc2VsZWN0T25lUmFkaW8ucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RPbmVSYWRpb19sYWJlbCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCBBIHtjb2xvcjojMDAwMDAwfQorLmFmX2lucHV0TnVtYmVyU3BpbmJveF9pbmNyZW1lbnQtY2VsbCwuYWZfaW5wdXROdW1iZXJTcGluYm94X2RlY3JlbWVudC1jZWxsIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7d2lkdGg6MTFweDtoZWlnaHQ6OHB4fQorLmFmX2lucHV0TnVtYmVyU3BpbmJveF9zcGluYm94LWNlbGwge3BhZGRpbmctbGVmdDoxcHh9CisuYWZfbWVudUxpc3Rfc2VsZWN0ZWQsLk9yYU5hdjNTZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojY2NmZmNjfQorLmFmX21lbnVDaG9pY2VfbGFiZWwsLnBvcnRsZXQtZm9udCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsfQorQk9EWSwucG9ydGxldC1zZWN0aW9uLWJvZHksLnBvcnRsZXQtdGFibGUtYm9keSB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZn0KKy5hZl90cmVlVGFibGVfcGF0aC1zdGVwLC5hZl9tZW51UGF0aF9zdGVwLC5hZl9tZW51UGF0aF9zZWxlY3RlZC1zdGVwIHtjb2xvcjojMDAzMzMzO2ZvbnQtc2l6ZTo5cHR9CisuYWZfdHJlZVRhYmxlX3BhdGgtc2VsZWN0ZWQtc3RlcCB7Zm9udC1zaXplOjlwdDtjb2xvcjojMDAwMDAwfQorLmFmX3BhbmVsTGlzdCBVTCB7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9CitidXR0b24ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O3BhZGRpbmc6MHB4O21hcmdpbjoxcHh9CisuYWZfaW5wdXRDb2xvcl9zd2F0Y2gtb3ZlcmxheSB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDotN3B4O3RvcDo1cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyIHtiYWNrZ3JvdW5kLWNvbG9yOiNFRkVGRUY7cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1kaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1pbmFjdGl2ZS1kaXNhYmxlZCB7Y3Vyc29yOmRlZmF1bHR9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIHtjdXJzb3I6cG9pbnRlcn0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IHtjb2xvcjojMDAwMDAwO2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYTpob3ZlciwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhOmhvdmVyLC5BRkFjY2Vzc0tleVN0eWxlIHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IHtjb2xvcjpncmF5O2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUucF9BRkRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZS5wX0FGRGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIHtjb2xvcjpncmF5fQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206M3B4fQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQgYSB7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLXNlcGFyYXRvciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4O2NvbG9yOmdyYXl9CisuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCBBLC5BRkxpbmtBY2Nlc3NLZXlTdHlsZSwuYWZfaW5wdXREYXRlX3NlbGVjdGVkLC5hZl9jaG9vc2VEYXRlX3NlbGVjdGVkIHtmb250LXdlaWdodDpib2xkfQorLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtc2VwYXJhdG9yIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmctbGVmdDo2cHg7cGFkZGluZy1yaWdodDo2cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1idWxsZXQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjE3cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2xpc3QtYnVsbGV0LmdpZik7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMge2hlaWdodDoyNnB4O292ZXJmbG93OmhpZGRlbn0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZS5wX0FGRGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUucF9BRkRpc2FibGVkIHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjpncmF5fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbiB7aGVpZ2h0OjIycHg7d2lkdGg6MjZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOnRvcCByaWdodH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4tZnJvbS1hY3RpdmUsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbi1mcm9tLWluYWN0aXZlIHtoZWlnaHQ6MjJweDt3aWR0aDoxNHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCB7aGVpZ2h0OjIycHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3BhZGRpbmctbGVmdDozcHg7d2hpdGUtc3BhY2U6bm93cmFwfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kLWpvaW4tdG8taW5hY3RpdmUge2hlaWdodDoyMnB4O3dpZHRoOjEycHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kIHtoZWlnaHQ6MjJweDt3aWR0aDoxNXB4fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1taWQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZCB7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydC1jb250ZW50IHtoZWlnaHQ6NHB4O3dpZHRoOjE3cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZC1jb250ZW50IHtoZWlnaHQ6NHB4fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1jb250ZW50IHtoZWlnaHQ6NHB4O3dpZHRoOjEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIEEge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtam9pbiB7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbiB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtYm90LW1pZC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydC1jb250ZW50IHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1ib3Qtc3RhcnQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLW1pZC1zZWxlY3RlZC5naWYpO2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtZW5kLWpvaW4tdG8taW5hY3RpdmUge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1qb2luLXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtam9pbiwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtam9pbiB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtYm90LWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWNvbnRlbnQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWJvdC1lbmQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0IHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWNvbnRlbnQge2JhY2tncm91bmQtaW1hZ2U6bm9uZX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLXN0YXJ0LWpvaW4tZnJvbS1hY3RpdmUge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbi1mcm9tLWluYWN0aXZlIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1qb2luLWRlc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIHtjb2xvcjojMDAwMDAwO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLW1pZC1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQtam9pbi10by1pbmFjdGl2ZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtZW5kLWpvaW4tZGVzZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWVuZC1kZXNlbGVjdGVkLmdpZil9CisuYWZfcGFuZWxGb3JtTGF5b3V0X2NvbHVtbiwucF9PcmFUcmVlSWNvbiB7dmVydGljYWwtYWxpZ246dG9wfQorLmFmX3BhbmVsRm9ybUxheW91dF9zZXBhcmF0b3Ige2JhY2tncm91bmQtY29sb3I6Z3JheTtoZWlnaHQ6MXB4O2ZvbnQtc2l6ZToxcHg7bWFyZ2luLXRvcDozcHg7bWFyZ2luLWJvdHRvbTozcHh9CisuYWZfcGFuZWxGb3JtTGF5b3V0X2NlbGwsLmFmX3BhbmVsRm9ybUxheW91dF9jb250ZW50LWNlbGwsLmFmX3BhbmVsRm9ybUxheW91dF9tZXNzYWdlLWNlbGwge3BhZGRpbmc6MXB4IDBweH0KKy5hZl9wYW5lbEZvcm1MYXlvdXRfbGFiZWwtc3RhY2tlZC1jZWxsIHtwYWRkaW5nOjFweCAwcHg7dGV4dC1hbGlnbjpsZWZ0fQorLmFmX3BhbmVsQm94X3RyYW5zcGFyZW50LC5hZl9wYW5lbEJveF9saWdodCwuYWZfcGFuZWxCb3hfbWVkaXVtIHtib3JkZXItY29sb3I6Izk5Y2M5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweDttYXJnaW46MnB4fQorLmFmX3BhbmVsQm94X2Rhcmsge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O21hcmdpbjoycHg7Ym9yZGVyLWNvbG9yOiM2Njk5NjZ9CisuYWZfcGFuZWxCb3hfdHJhbnNwYXJlbnQgaW1nLC5hZl9wYW5lbEJveF9saWdodCBpbWcsLmFmX3BhbmVsQm94X21lZGl1bSBpbWcsLmFmX3BhbmVsQm94X2RhcmsgaW1nLC5hZl9zZWxlY3RNYW55U2h1dHRsZV9ib3gtY29udGVudCBpbWcsLmFmX3NlbGVjdE9yZGVyU2h1dHRsZV9ib3gtY29udGVudCBpbWcsLmFmX21lbnVCYXIgaW1nLC5hZl9tZXNzYWdlcyBpbWcsLmFmX21lbnVUYWJzIGltZyB7dmVydGljYWwtYWxpZ246Ym90dG9tfQorLmFmX3BhbmVsQm94X2JvZHkge3BhZGRpbmc6NXB4O2hlaWdodDoyMHB4fQorLmFmX3BhbmVsQm94X2xpZ2h0IC5hZl9wYW5lbEJveF9ib2R5LC5hZl9zZWxlY3RNYW55U2h1dHRsZV9ib3gtY29udGVudCAuYWZfc2VsZWN0TWFueVNodXR0bGVfYm94LWJvZHksLmFmX3NlbGVjdE9yZGVyU2h1dHRsZV9ib3gtY29udGVudCAuYWZfc2VsZWN0T3JkZXJTaHV0dGxlX2JveC1ib2R5LC5hZl9wYW5lbFNpZGVCYXJfYm9keSwuT3JhQkdBY2NlbnRMaWdodCwuUG9ydGxldEJvZHlDb2xvciwuUG9ydGxldFN1YkhlYWRlckNvbG9yLC5hZl9tZXNzYWdlc19ib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTh9CisuYWZfcGFuZWxCb3hfbWVkaXVtIC5hZl9wYW5lbEJveF9ib2R5LC5PcmFCR0FjY2VudE1lZGl1bSB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmNjfQorLmFmX3BhbmVsQm94X2RhcmsgLmFmX3BhbmVsQm94X2JvZHksLk9yYUJHQWNjZW50RGFyayB7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDfQorLmFmX3BhbmVsQm94X2hlYWRlciwuUG9ydGxldEhlYWRlckNvbG9yIHt3aWR0aDoxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFwdDtwYWRkaW5nOjBweCAzcHg7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl9wYW5lbEJveF9saWdodCAuYWZfcGFuZWxCb3hfaGVhZGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiM5OWNjOTk7Y29sb3I6I2ZmZmZmZn0KKy5hZl9wYW5lbFBhZ2VfY29weXJpZ2h0LC5hZl9wYW5lbFBhZ2VfcHJpdmFjeSwuYWZfcGFuZWxQYWdlX2Fib3V0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjhwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt3aGl0ZS1zcGFjZTpub3dyYXA7cGFkZGluZzo1cHh9CisuYWZfcGFuZWxQYWdlX2NvcHlyaWdodCBBLC5hZl9wYW5lbFBhZ2VfcHJpdmFjeSBBLC5hZl9wYW5lbFBhZ2VfYWJvdXQgQSwuYWZfdHJhaW5fbGluaywuYWZfcGFuZWxUYWJiZWRfdGFiIEEsLnBfT3JhVHJlZVJvdyBBOmxpbmssLnBfT3JhVHJlZVJvdyBBOmFjdGl2ZSwucF9PcmFUcmVlUm93IEE6dmlzaXRlZCB7Y29sb3I6IzAwMzMzM30KKy5hZl9wYW5lbENhcHRpb25Hcm91cCB7Ym9yZGVyLWNvbG9yOiNlOWU4ZTh9CisuYWZfcGFuZWxDYXB0aW9uR3JvdXBfY2FwdGlvbiwuT3JhUGFnZVN0YW1wTGFiZWwsLk9yYVRhYmxlQ29udHJvbEJhclRleHQsLnBfT3JhVHJlZVJvd1NlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNjY5OTY2fQorLmFmX3BhbmVsUG9wdXBfdHJpZ2dlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAzMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9wYW5lbFBvcHVwX2Nsb3NlLWljb24ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLWxlZnQ6NXB4fQorLmFmX21lbnVCdXR0b25zX3RleHQge2NvbG9yOiMwMDMzMzM7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nOjBweCAycHggMnB4IDJweH0KKy5hZl9tZW51QnV0dG9uc190ZXh0LXNlbGVjdGVkIHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZzowcHggMnB4IDJweCAycHh9CisuYWZfbWVudUJ1dHRvbnNfdGV4dC1kaXNhYmxlZCB7Y29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmc6MHB4IDJweCAycHggMnB4fQorLmFmX21lbnVCYXIge2JhY2tncm91bmQtY29sb3I6IzY2OTk2Njtjb2xvcjojZmZmZmZmO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7bWluLWhlaWdodDo0cHg7cGFkZGluZzowcHh9CisuYWZfbWVudUJhcl9lbmFibGVkLC5hZl9tZW51QmFyX3NlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmc6MHB4IDBweCAwcHggNXB4O3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9tZW51QmFyX2VuYWJsZWQgQSwuYWZfbWVudUJhcl9zZWxlY3RlZCBBLC5Qb3J0bGV0SGVhZGVyTGluaywuUG9ydGxldFN1YkhlYWRlckxpbmsge2NvbG9yOiNmZmZmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfbWVudUJhcl9zZXBhcmF0b3Ige2NvbG9yOiNmZmZmZmY7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbH0KKy5hZl90cmVlVGFibGVfZXhwYW5zaW9uIHtjb2xvcjojNjY5OTY2O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowcHg7bGVmdDotMThweDt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl90cmVlVGFibGVfZm9jdXMge2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl90cmVlVGFibGVfbG9jYXRvciB7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfQorLmFmX3Nob3dPbmVQYW5lbF9jb250YWluZXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci13aWR0aDowcHggMXB4IDFweCAxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkfQorLmFmX3Nob3dPbmVQYW5lbF9oZWFkZXItY29sbGFwc2VkIHtib3JkZXItY29sb3I6Izk5OTk5OTtoZWlnaHQ6MjFweDt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXA7cGFkZGluZy1yaWdodDo1cHg7Ym9yZGVyLXdpZHRoOjFweCAwcHggMHB4IDBweDtib3JkZXItc3R5bGU6c29saWQ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZy1sZWZ0OjVweH0KKy5hZl9zaG93T25lUGFuZWxfaGVhZGVyLWV4cGFuZGVkIHtib3JkZXItY29sb3I6Izk5OTk5OTtoZWlnaHQ6MjFweDt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXA7cGFkZGluZy1yaWdodDo1cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4IDFweCAwcHg7cGFkZGluZy1sZWZ0OjJweH0KKy5hZl9zaG93T25lUGFuZWxfaGVhZGVyLWRpc2FibGVkIHtib3JkZXItY29sb3I6Izk5OTk5OTtoZWlnaHQ6MjFweDt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXA7cGFkZGluZy1yaWdodDo1cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4IDBweCAwcHg7cGFkZGluZy1sZWZ0OjE4cHh9CisuYWZfc2hvd09uZVBhbmVsX2NvbnRlbnQge3ZlcnRpY2FsLWFsaWduOnRvcDttYXJnaW46NXB4fQorLmFmX3Nob3dPbmVQYW5lbF90aXRsZS1saW5rIHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiM2Njk5NjY7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDoycHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfc2hvd09uZVBhbmVsX3RpdGxlLWRpc2FibGVkLWxpbmsge2NvbG9yOiM5OTk5OTk7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDoycHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGR9CisuQUZIZWFkZXJMZXZlbFR3byxIMi5hZl9wYW5lbEhlYWRlcixIMi5hZl9zaG93RGV0YWlsSGVhZGVyLC5Qb3J0bGV0SGVhZGluZzIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFwdDtjb2xvcjojNjY5OTY2O2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5BRkhlYWRlckxldmVsVGhyZWVQbHVzLEgzLmFmX3BhbmVsSGVhZGVyLEg0LmFmX3BhbmVsSGVhZGVyLEg1LmFmX3BhbmVsSGVhZGVyLEg2LmFmX3BhbmVsSGVhZGVyLEgzLmFmX3Nob3dEZXRhaWxIZWFkZXIsSDQuYWZfc2hvd0RldGFpbEhlYWRlcixINS5hZl9zaG93RGV0YWlsSGVhZGVyLEg2LmFmX3Nob3dEZXRhaWxIZWFkZXIsLlBvcnRsZXRIZWFkaW5nMywuUG9ydGxldEhlYWRpbmc0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Y29sb3I6IzY2OTk2Njtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4O21hcmdpbjowcHh9CisuYWZfcGFuZWxIZWFkZXJfZXJyb3IsLmFmX21lc3NhZ2VzX2Vycm9yLC5wb3J0bGV0LW1zZy1lcnJvciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZzowcHg7bWFyZ2luOjBweDtjb2xvcjojY2MwMDAwfQorLmFmX21lc3NhZ2VzX2hlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW46MHB4O2JvcmRlci1jb2xvcjojQ0NDQ0NDO2JvcmRlci13aWR0aDowcHggMHB4IDFweCAwcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTttYXJnaW4tYm90dG9tOjNweDtwYWRkaW5nOjBweCAzcHh9CisuYWZfbWVzc2FnZXMge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzMzNjYzMzt3aWR0aDoxMDAlO2JvcmRlci1jb2xvcjojOTk5OTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZmZjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweDtwYWRkaW5nOjBweDttYXJnaW46NXB4IDBweCAwcHh9CisuYWZfbWVzc2FnZXNfbWVzc2FnZS10ZXh0LC5hZl9tZXNzYWdlc19saXN0LC5wb3J0bGV0LW1zZy1pbmZvIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjY7bWFyZ2luOjBweCAwcHggMHB4IDBweDtwYWRkaW5nOjVweCAzMHB4IDVweCAzMHB4fQorLmFmX3BhbmVsU2lkZUJhciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMzM2NjMzO2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci13aWR0aDowcHggMXB4IDFweDtib3JkZXItc3R5bGU6c29saWQ7cGFkZGluZzowcHg7bWFyZ2luOjBweCA1cHggMHB4IDBweH0KKy5BRlNvcnRhYmxlSGVhZGVyU29ydEljb24ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2O3BhZGRpbmctbGVmdDo0cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfbWVudVRhYnNfZW5hYmxlZCB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4O3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4IDFweDtwYWRkaW5nOjJweCA2cHh9CisuYWZfbWVudVRhYnNfc2VsZWN0ZWQge2JhY2tncm91bmQtY29sb3I6IzY2OTk2Njt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweCAxcHg7cGFkZGluZzoycHggNnB4fQorLmFmX21lbnVUYWJzX2Rpc2FibGVkIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Y29sb3I6Izk5OTk5OTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweCAxcHg7cGFkZGluZzoycHggNnB4fQorLmFmX21lbnVUYWJzX2VuYWJsZWQgQSB7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzMzNjYzM30KKy5hZl9tZW51VGFic19zZWxlY3RlZCBBIHt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojY2NmZmNjO2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbWVudVRhYnNfc2VwYXJhdG9yIHt3aWR0aDowcHh9CisuYWZfdGFibGVfY29udGVudCwuYWZfdHJlZVRhYmxlX2NvbnRlbnQge2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5hZl90YWJsZV9jb250cm9sLWJhci10b3AsLmFmX3RyZWVUYWJsZV9jb250cm9sLWJhci10b3Age2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4O3BhZGRpbmc6MXB4IDJweH0KKy5hZl90YWJsZV9jb250cm9sLWJhci1ib3R0b20sLmFmX3RyZWVUYWJsZV9jb250cm9sLWJhci1ib3R0b20ge2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHggMXB4O3BhZGRpbmc6MXB4IDJweH0KKy5hZl90YWJsZV9zdWItY29udHJvbC1iYXIsLmFmX3RyZWVUYWJsZV9zdWItY29udHJvbC1iYXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHg7cGFkZGluZzoxcHggMnB4fQorLmFmX2NvbHVtbl9jZWxsLXRleHQsLnBvcnRsZXQtc2VjdGlvbi1zZWxlY3RlZCwucG9ydGxldC10YWJsZS1zZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OX0KKy5hZl9jb2x1bW5fY2VsbC10ZXh0LWJhbmQsLnBvcnRsZXQtc2VjdGlvbi1hbHRlcm5hdGUsLnBvcnRsZXQtdGFibGUtYWx0ZXJuYXRlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlci1jb2xvcjojOTk5OTk5fQorLmFmX2NvbHVtbl9jZWxsLW51bWJlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MnB4fQorLmFmX2NvbHVtbl9jZWxsLW51bWJlci1iYW5kIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlci1jb2xvcjojOTk5OTk5O3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1yaWdodDoycHh9CisuYWZfY29sdW1uX2NlbGwtaWNvbi1mb3JtYXQsLmFmX3RhYmxlU2VsZWN0T25lX2NlbGwtaWNvbi1mb3JtYXQsLmFmX3RhYmxlU2VsZWN0TWFueV9jZWxsLWljb24tZm9ybWF0LC5PcmFUYWJsZUNlbGxTZWxlY3QsLnBvcnRsZXQtc2VjdGlvbi10ZXh0LC5wb3J0bGV0LXRhYmxlLXRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7dGV4dC1hbGlnbjpjZW50ZXJ9CisuYWZfY29sdW1uX2NlbGwtaWNvbi1mb3JtYXQtYmFuZCwuYWZfdGFibGVTZWxlY3RPbmVfY2VsbC1pY29uLWZvcm1hdC1iYW5kLC5hZl90YWJsZVNlbGVjdE1hbnlfY2VsbC1pY29uLWZvcm1hdC1iYW5kLC5PcmFUYWJsZUNlbGxTZWxlY3RCYW5kIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlci1jb2xvcjojOTk5OTk5O3RleHQtYWxpZ246Y2VudGVyfQorLmFmX2NvbHVtbl9oZWFkZXItdGV4dCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0KKy5hZl9jb2x1bW5faGVhZGVyLW51bWJlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO3RleHQtYWxpZ246cmlnaHR9CisuYWZfY29sdW1uX2hlYWRlci1pY29uLWZvcm1hdCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO3RleHQtYWxpZ246Y2VudGVyfQorLmFmX2NvbHVtbl9yb3ctaGVhZGVyLXRleHQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjZ9CisuYWZfdGFibGVfZGV0YWlsIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmfQorLmFmX3RhYmxlX2NvbHVtbi1mb290ZXIsLnBvcnRsZXQtc2VjdGlvbi1mb290ZXIsLnBvcnRsZXQtdGFibGUtZm9vdGVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjZ9CisuT3JhVGFibGVUb3RhbCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzY2OTk2Nn0KKy5hZl9jb2x1bW5fdG90YWwtbnVtYmVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfQorLmFmX2NvbHVtbl90b3RhbC10ZXh0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9CisuYWZfY29sdW1uX3NvcnRhYmxlLWhlYWRlci10ZXh0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO2N1cnNvcjpwb2ludGVyO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOm91dHNldH0KKy5hZl9jb2x1bW5fc29ydGFibGUtaGVhZGVyLW51bWJlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO2N1cnNvcjpwb2ludGVyO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOm91dHNldDt0ZXh0LWFsaWduOnJpZ2h0fQorLmFmX2NvbHVtbl9zb3J0YWJsZS1oZWFkZXItaWNvbi1mb3JtYXQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtjdXJzb3I6cG9pbnRlcjtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpvdXRzZXQ7dGV4dC1hbGlnbjpjZW50ZXJ9CisuYWZfdHJhaW5fc3RvcC1jb250ZW50LC5hZl90cmFpbl9vdmVyZmxvdy1zdGFydC1jb250ZW50LC5hZl90cmFpbl9vdmVyZmxvdy1lbmQtY29udGVudCwuYWZfdHJhaW5fcGFyZW50LXN0YXJ0LWNvbnRlbnQsLmFmX3RyYWluX3BhcmVudC1lbmQtY29udGVudCB7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjJweDt9CisuYWZfdHJhaW5fc3RvcC5wX0FGU2VsZWN0ZWQge2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXItY29sb3I6IzY2OTk2Nn0KKy5hZl90cmFpbl9zdG9wOnZpc2l0ZWQsLmFmX3RyYWluX3N0b3A6dmlzaXRlZCAuYWZfdHJhaW5fbGluayB7Y29sb3I6IzY2NjY2Nn0KKy5hZl90cmFpbl9zdG9wLnBfQUZEaXNhYmxlZCB7Y29sb3I6Izk5OTk5OTtib3JkZXItY29sb3I6I2NjY2NjY30KKy5hZl90cmFpbl9zdG9wLnBfQUZVbnZpc2l0ZWQge2NvbG9yOiM2Njk5NjY7Ym9yZGVyLWNvbG9yOiM2Njk5NjZ9CisuYWZfdHJhaW5fc3RvcC5wX0FGRGlzYWJsZWQgLmFmX3RyYWluX2xpbmsge2NvbG9yOiM2Njk5OTl9CisuT3JhQkdDb2xvclZlcnlEYXJrIHtiYWNrZ3JvdW5kLWNvbG9yOiMzMzY2MzN9CisuT3JhQkdDb2xvckRhcmssLmFmX21lbnVCYXJfYm9keSwuYWZfbWVudUJhcl90aXRsZSwuYWZfbWVudUJhcl9lbXB0eSB7YmFja2dyb3VuZC1jb2xvcjojNjY5OTY2fQorLk9yYUJHQ29sb3JNZWRpdW0ge2JhY2tncm91bmQtY29sb3I6Izk5Y2M5OX0KKy5PcmFCR0NvbG9yTGlnaHQge2JhY2tncm91bmQtY29sb3I6I2NjZmZjY30KKy5PcmFCR0dyYXlWZXJ5RGFyayB7YmFja2dyb3VuZC1jb2xvcjojMzMzMzMzfQorLk9yYUJHR3JheURhcmsge2JhY2tncm91bmQtY29sb3I6IzY2NjY2Nn0KKy5PcmFCR0dyYXlNZWRpdW0sLk9yYUJHQWNjZW50VmVyeURhcmssLk9yYVRhYmxlIHtiYWNrZ3JvdW5kLWNvbG9yOiM5OTk5OTl9CisuT3JhQkdHcmF5TGlnaHQge2JhY2tncm91bmQtY29sb3I6I2NjY2NjY30KKy5PcmFJbmxpbmVJbmZvVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjZ9CisuT3JhVGV4dElubGluZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM5OWNjOTl9CisuT3JhTWVzc2FnZUJveEVycm9yVGV4dCwuQUZFcnJvclRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6I2NjMDAwMH0KKy5PcmFFcnJvck5hbWVUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojY2MwMDAwfQorLk9yYUlubGluZUVycm9yVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo4cHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiNjYzAwMDB9CisuT3JhR2xvYmFsUGFnZVRpdGxlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHQ7Y29sb3I6I2ZmZmZmZjtmb250LXdlaWdodDpib2xkfQorLnBfT3JhU2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I2NjZmZjYzt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5wX09yYUhpZGRlbkxhYmVsIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTk5OXB4O2xlZnQ6MHB4O2ZvbnQtc2l6ZTowcHh9CisucF9PcmFDb2xvckZpZWxkU3dhdGNoIHtib3JkZXItY29sb3I6IzAwMDAwMDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5wX09yYUNvbG9yUGFsZXR0ZSB7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwfQorLnBfT3JhQ29sb3JQYWxldHRlRW1wdHlDZWxsIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZ9CisuYWZfaW5wdXREYXRlX25hdiBBLC5hZl9jaG9vc2VEYXRlX25hdiBBIHtjb2xvcjojMDAzMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX2lucHV0RGF0ZV90aXRsZSwuYWZfY2hvb3NlRGF0ZV90aXRsZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Y29sb3I6IzY2OTk2NjtwYWRkaW5nOjJweH0KKy5hZl9pbnB1dERhdGVfaGVhZGVyLC5hZl9jaG9vc2VEYXRlX2hlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzY2OTk2NjtwYWRkaW5nOjJweH0KKy5hZl9pbnB1dERhdGVfY29udGVudCBBLC5hZl9jaG9vc2VEYXRlX2NvbnRlbnQgQSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAzMzMzfQorLmFmX2Nob29zZURhdGVfY29udGVudCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojOTk5OTk5O3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MnB4fQorLnBfT3JhQ29udGVudEZvb3RlclJ1bGUge2NvbG9yOiM2Njk5NjZ9CisucF9PcmFDb250ZW50Rm9vdGVyU3RhcnQge2Zsb2F0OmxlZnR9CisucF9PcmFDb250ZW50Rm9vdGVyQm90dG9tIHtjbGVhcjpib3RoO21hcmdpbi1ib3R0b206NXB4fQorLnBfT3JhRm9vdGVyIHt0ZXh0LWFsaWduOmNlbnRlcn0KKy5wX09yYUZvb3RlckJvdHRvbSB7cGFkZGluZy10b3A6NXB4fQorLnBfT3JhSGVhZGVyTmVzdCB7bWFyZ2luOjVweCAwcHggMHB4IDEycHh9CisuT3JhSEdyaWRMb2NhdG9ySGVhZGVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTh9CisucF9PcmFIaWRlU2hvd0Rpc2Nsb3NlZFN5bWJvbCwuYWZfcGFuZWxUYWJiZWRfdGFiLXNlbGVjdGVkIEEsLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCBBOmxpbmssLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCBBOmFjdGl2ZSwucF9PcmFUcmVlRGlzY2xvc2VkU3ltYm9sIEE6dmlzaXRlZCwucF9PcmFUcmVlUm93U2VsZWN0ZWQgQTpsaW5rLC5wX09yYVRyZWVSb3dTZWxlY3RlZCBBOmFjdGl2ZSwucF9PcmFUcmVlUm93U2VsZWN0ZWQgQTp2aXNpdGVkIHtjb2xvcjojNjY5OTY2O3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX21lc3NhZ2VzX2xpc3Qtc2luZ2xlIHtsaXN0LXN0eWxlLXR5cGU6bm9uZX0KKy5wX09yYVF1aWNrU2VhcmNoQm94IHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiNDQ0NDQ0M7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MHB0IDVwdCA1cHQgNXB0O2JvcmRlci13aWR0aDowcHggMHB4IDFweCAxcHh9CisucF9PcmFHbG9iYWxRdWljayB7Ym9yZGVyLWNvbG9yOiNDQ0NDQ0M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMHB4IDBweCAxcHh9CisucF9PcmFQcm9jZXNzaW5nU3RhdHVzIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNjY5OTY2O2JvcmRlci1jb2xvcjojOTljYzk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4fQorLnBfT3JhUHJvZHVjdEJyYW5kaW5nVGV4dCB7Y29sb3I6IzY2OTk2Njtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LWZhbWlseTpHYXJhbW9uZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgU2VyaWY7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyNHB0O2xpbmUtaGVpZ2h0OjI4LjhwdDt0b3A6LTQuOHB0fQorLnBfT3JhUHJvZHVjdEJyYW5kaW5nQ29tcGFjdFRleHQge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O21hcmdpbi1ib3R0b206MHB4O21hcmdpbi10b3A6MHB4O2ZvbnQtd2VpZ2h0OmJvbGR9CisuT3JhU2h1dHRsZUhlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo5cHQ7Y29sb3I6IzY2OTk2Njtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4IDBweCAwcHggMThweH0KKy5PcmFTaHV0dGxlTGlua1RleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAzMzMzfQorLnBfT3JhU2lkZUJhck1pbldpZHRoIHt3aWR0aDoxNDBweH0KKy5PcmFTdHlsZWRMaXN0IHtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTtwYWRkaW5nOjBweDttYXJnaW46MHB4fQorLk9yYVN0eWxlZExpc3QgLk9yYVN0eWxlZExpc3Qge3BhZGRpbmc6MHB0IDBwdCAwcHQgMTBwdH0KKy5hZl9wYW5lbFRhYmJlZF9vcmllbnRhdGlvbi10b3Age2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5Y2M5OTt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7cGFkZGluZzoycHggMHB4O21hcmdpbjo0cHggMHB4O2JvcmRlci13aWR0aDoxcHggMHB4IDBweH0KKy5hZl9wYW5lbFRhYmJlZF9vcmllbnRhdGlvbi1ib3R0b20ge2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5Y2M5OTt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7cGFkZGluZzoycHggMHB4O21hcmdpbjo0cHggMHB4O2JvcmRlci13aWR0aDowcHggMHB4IDFweH0KKy5hZl9wYW5lbFRhYmJlZF90YWIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZzowcHggOHB4fQorLmFmX3BhbmVsVGFiYmVkX3RhYiAucF9PcmFEaXNhYmxlZCB7Y29sb3I6Izk5OTk5OX0KKy5hZl9wYW5lbFRhYmJlZF90YWItc2VsZWN0ZWQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4IDhweH0KKy5hZl9wYW5lbFRhYmJlZF9jZWxsLXN0YXJ0IHt3aWR0aDowJX0KKy5hZl9wYW5lbFRhYmJlZF9jZWxsLWVuZCB7d2lkdGg6MTAwJX0KKy5PcmFUYWJsZUJvcmRlcjAwMDEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAwcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMDAxMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMHB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjAwMTEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDBweCAxcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMDEwMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4IDBweCAwcHh9CisuT3JhVGFibGVCb3JkZXIwMTAxIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHh9CisuT3JhVGFibGVCb3JkZXIwMTEwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHggMXB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjAxMTEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDFweCAxcHh9CisuT3JhVGFibGVCb3JkZXIxMDAwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTAwMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMHB4IDBweCAxcHh9CisuT3JhVGFibGVCb3JkZXIxMDEwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHh9CisuT3JhVGFibGVCb3JkZXIxMDExIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMXB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjExMDAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTEwMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjExMTAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAxcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTExMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHh9CisuT3JhVGFibGVUaXRsZSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Y29sb3I6IzY2OTk2Nn0KKy5wX09yYVRyZWVEaXNjbG9zZWRTeW1ib2wge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOnJpZ2h0fQorLnBfT3JhVHJlZU5vZGVBZGp1c3Qge3BhZGRpbmctYm90dG9tOjJweH0KKy5hZl9jaGFydCB7d2lkdGg6NDAwcHg7aGVpZ2h0OjMwMHB4O2JhY2tncm91bmQtY29sb3I6d2hpdGV9CisucF9PcmFPbmVQaXhlbExpbmUge2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztmb250LXNpemU6MHB0O292ZXJmbG93OmhpZGRlbjtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9CisucF9PcmFEaXNwbGF5QmxvY2sge2Rpc3BsYXk6YmxvY2t9CisucF9PcmFIaWRlU2tpcE5hdmlUZXh0IHtmb250LXNpemU6MHB0O21hcmdpbi10b3A6MHB4O21hcmdpbi1sZWZ0Oi05OTlweH0KKy5BRkxvZ28ge3dpZHRoOjEwM3B4O2hlaWdodDoxM3B4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2xvZ28tZGFyay5naWYpfQorLmFmX3BhbmVsQm94X2NvbnRlbnQtZGFyayB7Ym9yZGVyLWNvbG9yOiM2Njk5NjZ9CisuYWZfdHJhaW5fc3RvcC5wX0FGVmlzaXRlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTl9CisuYWZfcGFuZWxIZWFkZXIsLmFmX3Nob3dEZXRhaWxIZWFkZXIge2JvcmRlci1jb2xvcjojQ0NDQ0NDO2JvcmRlci13aWR0aDowcHggMHB4IDFweCAwcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTttYXJnaW4tYm90dG9tOjNweDtwYWRkaW5nOjBweCAzcHh9CisuYWZfcGFuZWxIZWFkZXJfaWNvbi1zdHlsZSB7bWFyZ2luLXJpZ2h0OjNweH0KKy5hZl9vYmplY3RTZXBhcmF0b3Ige2JvcmRlci1jb2xvcjojNjY5OTY2O2JvcmRlci1zdHlsZTpkYXNoZWQgbm9uZSBub25lO2JvcmRlci13aWR0aDoxcHggMHB4IDBweDtoZWlnaHQ6MXB4O21hcmdpbjotM3B4IDBweCAtM3B4IDBweDtwYWRkaW5nOjBweH0KK2JvZHkge21hcmdpbi10b3A6OHB4fQorLnBfT3JhTmF2MiB7Ym9yZGVyLWNvbG9yOiM5OWNjOTl9CisuYWZfbmF2aWdhdGlvblBhbmUge2hlaWdodDoyNXB4fQorLyogVGhlIG51bWJlciBvZiBDU1Mgc2VsZWN0b3JzIGluIHRoaXMgZmlsZSBpcyA1NjYgKi8KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvc2ltcGxlLmNzcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzZi5hcGFjaGUudHJpbmlkYWQudGFnc3VwcG9ydC9kdFJlelByb3ZDYWNoZS9teWZhY2VzLmFwYWNoZS5vcmdfdHJpbmlkYWQvc2tpbm5pbmcvc2ltcGxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZkNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNmLmFwYWNoZS50cmluaWRhZC50YWdzdXBwb3J0L2R0UmV6UHJvdkNhY2hlL215ZmFjZXMuYXBhY2hlLm9yZ190cmluaWRhZC9za2lubmluZy9zaW1wbGUuY3NzCkBAIC0wLDAgKzEsMjI2IEBACisvKiBUaGlzIENTUyBmaWxlIGdlbmVyYXRlZCBvbiBUaHUgQXByIDAyIDE1OjUyOjQ2IFBEVCAyMDA5ICovCisuQUZJbnN0cnVjdGlvblRleHQsLkFGRmllbGRUZXh0LC5hZl9vdXRwdXRUZXh0LC5hZl9vdXRwdXRGb3JtYXR0ZWQsLmFmX291dHB1dERvY3VtZW50LC5hZl9pbnB1dENob2ljZV9jb250ZW50LC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLmFmX2lucHV0Q29sb3JfY29udGVudCwuYWZfaW5wdXREYXRlX2NvbnRlbnQsLmFmX2lucHV0TGlzdE9mVmFsdWVzX2NvbnRlbnQsLmFmX3NlbGVjdE1hbnlDaGVja2JveF9jb250ZW50LC5hZl9zZWxlY3RNYW55TGlzdGJveF9jb250ZW50LC5hZl9zZWxlY3RPbmVDaG9pY2VfY29udGVudCwuYWZfc2VsZWN0T25lTGlzdGJveF9jb250ZW50LC5hZl9zZWxlY3RPbmVSYWRpb19jb250ZW50LC5hZl9pbnB1dFRleHQuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGUGhvbmVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQuQUZQb3N0YWxDb2RlRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRUZXh0LkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0Q2hvaWNlLkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5BRlBob25lRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5BRlBvc3RhbENvZGVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0Q2hvaWNlLkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXROdW1iZXJTcGluYm94LkFGRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dE51bWJlclNwaW5ib3hfY29udGVudCwuYWZfaW5wdXROdW1iZXJTcGluYm94LnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLkFGRmllbGRUZXh0TFRSLC5BRlBob25lRmllbGRUZXh0LC5BRlBvc3RhbENvZGVGaWVsZFRleHQsLkFGQWRkcmVzc0ZpZWxkVGV4dCwuUG9ydGxldFRleHQxLC5Qb3J0bGV0VGV4dDIsLlBvcnRsZXRUZXh0MywuUG9ydGxldFRleHQ0LC5wb3J0bGV0LWZvcm0taW5wdXQtZmllbGQsLnBvcnRsZXQtZm9ybS1maWVsZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwfQorLkFGSW5zdHJ1Y3Rpb25UZXh0RGlzYWJsZWQsLkFGRmllbGRUZXh0RGlzYWJsZWQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZGaWVsZFRleHRMVFJNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGUGhvbmVGaWVsZFRleHRNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dFRleHQucF9BRkRpc2FibGVkLkFGUG9zdGFsQ29kZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRUZXh0X2NvbnRlbnQsLmFmX2lucHV0VGV4dC5wX0FGRGlzYWJsZWQuQUZBZGRyZXNzRmllbGRUZXh0TWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGRmllbGRUZXh0TFRSTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dENob2ljZS5wX0FGRGlzYWJsZWQuQUZQaG9uZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGUG9zdGFsQ29kZUZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGQWRkcmVzc0ZpZWxkVGV4dE1hcmtlciAuYWZfaW5wdXRDaG9pY2VfY29udGVudC1pbnB1dCwuYWZfaW5wdXROdW1iZXJTcGluYm94LnBfQUZEaXNhYmxlZC5BRkZpZWxkVGV4dExUUk1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQsLmFmX21lbnVCdXR0b25zX3RleHQtZGlzYWJsZWQsLnBfSW5Db250ZXh0QnJhbmRpbmdUZXh0LC5BRkZpZWxkVGV4dExUUkRpc2FibGVkLC5BRlBob25lRmllbGRUZXh0RGlzYWJsZWQsLkFGUG9zdGFsQ29kZUZpZWxkVGV4dERpc2FibGVkLC5BRkFkZHJlc3NGaWVsZFRleHREaXNhYmxlZCwuT3JhSEdyaWROYXZSb3dJbmFjdGl2ZUxpbmssLk9yYU5hdkJhckluYWN0aXZlTGluaywucG9ydGxldC1mb250LWRpbSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojOTk5OTk5fQorLkFGRGF0YVRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMDAwMDB9CisuQUZEYXRhVGV4dERpc2FibGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojOTk5OTk5fQorLkFGRGF0YU51bWJlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzAwMDAwMDt0ZXh0LWFsaWduOnJpZ2h0fQorLkFGRGF0YU51bWJlckRpc2FibGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojOTk5OTk5O3RleHQtYWxpZ246cmlnaHR9CisuQUZGaWVsZE51bWJlciwuYWZfaW5wdXRUZXh0LkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0VGV4dF9jb250ZW50LC5hZl9pbnB1dENob2ljZS5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dENob2ljZV9jb250ZW50LWlucHV0LC5hZl9pbnB1dE51bWJlclNwaW5ib3guQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojMDAwMDAwfQorLkFGRmllbGROdW1iZXJEaXNhYmxlZCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZC5BRkZpZWxkTnVtYmVyTWFya2VyIC5hZl9pbnB1dFRleHRfY29udGVudCwuYWZfaW5wdXRDaG9pY2UucF9BRkRpc2FibGVkLkFGRmllbGROdW1iZXJNYXJrZXIgLmFmX2lucHV0Q2hvaWNlX2NvbnRlbnQtaW5wdXQsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5wX0FGRGlzYWJsZWQuQUZGaWVsZE51bWJlck1hcmtlciAuYWZfaW5wdXROdW1iZXJTcGluYm94X2NvbnRlbnQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojOTk5OTk5fQorLkFGTGFiZWxUZXh0LC5hZl9vdXRwdXRMYWJlbCwuYWZfaW5wdXRDaG9pY2VfbGFiZWwsLmFmX2lucHV0RmlsZV9sYWJlbCwuYWZfaW5wdXROdW1iZXJTcGluYm94X2xhYmVsLC5hZl9pbnB1dFRleHRfbGFiZWwsLmFmX3NlbGVjdEJvb2xlYW5DaGVja2JveF9sYWJlbCwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX2xhYmVsLC5hZl9pbnB1dENvbG9yX2xhYmVsLC5hZl9pbnB1dERhdGVfbGFiZWwsLmFmX2lucHV0TGlzdE9mVmFsdWVzX2xhYmVsLC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfbGFiZWwsLmFmX3NlbGVjdE1hbnlMaXN0Ym94X2xhYmVsLC5hZl9zZWxlY3RPbmVDaG9pY2VfbGFiZWwsLmFmX3NlbGVjdE9uZUxpc3Rib3hfbGFiZWwsLmFmX3NlbGVjdE9uZVJhZGlvX2xhYmVsLC5hZl9wYW5lbExhYmVsQW5kTWVzc2FnZV9sYWJlbCwuYWZfcGFuZWxGb3JtTGF5b3V0X2xhYmVsLWNlbGwsLnBvcnRsZXQtZm9ybS1sYWJlbCwucG9ydGxldC1pY29uLWxhYmVsLC5wb3J0bGV0LWRsZy1pY29uLWxhYmVsLC5wb3J0bGV0LWZvcm0tZmllbGQtbGFiZWwge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiMwMDAwMDA7cGFkZGluZzowcHggOHB4IDBweCAwcHg7Zm9udC13ZWlnaHQ6bm9ybWFsfQorLkFGTGFiZWxDZWxsIHtwYWRkaW5nOjBweCA4cHggMHB4IDBweH0KKy5BRkVycm9ySWNvblN0eWxlIHtjb2xvcjojY2MwMDAwO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXdlaWdodDpib2xkfQorLkFGSW5mb0ljb25TdHlsZSwuQUZXYXJuaW5nSWNvblN0eWxlLC5BRlF1aWNrU2VsZWN0SWNvblN0eWxlIHtjb2xvcjojNjY5OTY2O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXdlaWdodDpib2xkfQorLkFGUmVxdWlyZWRJY29uU3R5bGUge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6Q291cmllcixzYW5zLXNlcmlmfQorLkFGUXVpY2tTZWxlY3REaXNhYmxlZEljb25TdHlsZSB7Y29sb3I6Izk5OTk5OTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5PcmFMaW5rOmxpbmssLmFmX3RyZWVUYWJsZV9wYXRoLC5hZl9tZW51UGF0aCwuYWZfcGFuZWxMaXN0IEEsLmFmX3BhbmVsUG9wdXBfbGluaywuYWZfbWVudUJ1dHRvbnNfdGV4dCwuT3JhTGlua1RleHQsLk9yYUhHcmlkTmF2Um93QWN0aXZlTGluaywuT3JhTmF2QmFyQWN0aXZlTGluayB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAzMzMzfQorLk9yYUxpbms6YWN0aXZlLC5PcmFBTGlua1RleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwNjY2Nn0KKy5PcmFMaW5rOnZpc2l0ZWQsLk9yYVZMaW5rVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMzM2NjY2fQorLk9yYUxpbmtEaXNhYmxlZCwuYWZfb3V0cHV0TGFiZWxfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfaW5wdXRDaG9pY2VfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfaW5wdXROdW1iZXJTcGluYm94X3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX2lucHV0VGV4dF9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX2lucHV0RGF0ZV9yZXF1aXJlZC1pY29uLXN0eWxlLC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0TWFueUxpc3Rib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lQ2hvaWNlX3JlcXVpcmVkLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZUxpc3Rib3hfcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lUmFkaW9fcmVxdWlyZWQtaWNvbi1zdHlsZSwuYWZfb3V0cHV0TGFiZWxfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfaW5wdXRDaG9pY2VfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfaW5wdXROdW1iZXJTcGluYm94X2dyb3VwLWljb24tc3R5bGUsLmFmX2lucHV0VGV4dF9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0Qm9vbGVhblJhZGlvX2dyb3VwLWljb24tc3R5bGUsLmFmX2lucHV0RGF0ZV9ncm91cC1pY29uLXN0eWxlLC5hZl9zZWxlY3RNYW55Q2hlY2tib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0TWFueUxpc3Rib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lQ2hvaWNlX2dyb3VwLWljb24tc3R5bGUsLmFmX3NlbGVjdE9uZUxpc3Rib3hfZ3JvdXAtaWNvbi1zdHlsZSwuYWZfc2VsZWN0T25lUmFkaW9fZ3JvdXAtaWNvbi1zdHlsZSwuYWZfbWVudUxpc3QsYnV0dG9uLC5hZl9uYXZpZ2F0aW9uUGFuZV9jaG9pY2UtbGFiZWwsLmFmX25hdmlnYXRpb25QYW5lX2Nob2ljZS1vcHRpb25zLC5hZl9uYXZpZ2F0aW9uUGFuZV9jaG9pY2UtYnV0dG9uLC5hZl9icmVhZENydW1icywuYWZfc2VsZWN0TWFueVNodXR0bGVfYm94LWNvbnRlbnQsLmFmX3NlbGVjdE9yZGVyU2h1dHRsZV9ib3gtY29udGVudCwuYWZfbWVudVRhYnMsLmFmX2NvbW1hbmRCdXR0b24sLmFmX2dvQnV0dG9uLC5hZl9yZXNldEJ1dHRvbiwucF9PcmFEaXNhYmxlZCwuT3JhTmF2MywucF9PcmFUcmVlUm93LC5wb3J0bGV0LWZvcm0tYnV0dG9uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsfQorLmFmX291dHB1dERvY3VtZW50X3RpdGxlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjY7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5hZl9vdXRwdXREb2N1bWVudF9wYXJhZ3JhcGgge3RleHQtYWxpZ246anVzdGlmeTtwYWRkaW5nOjBweDttYXJnaW46MHB4fQorLmFmX291dHB1dERvY3VtZW50X3NlcGFyYXRvciB7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzowcHg7bWFyZ2luOjBweH0KKy5hZl9wYW5lbFRpcCwuYWZfbWVudUJ1dHRvbnNfdGV4dC1zZWxlY3RlZCwuQUZIZWFkZXJMZXZlbFRocmVlUGx1cyxIMy5hZl9wYW5lbEhlYWRlcixINC5hZl9wYW5lbEhlYWRlcixINS5hZl9wYW5lbEhlYWRlcixINi5hZl9wYW5lbEhlYWRlcixIMy5hZl9zaG93RGV0YWlsSGVhZGVyLEg0LmFmX3Nob3dEZXRhaWxIZWFkZXIsSDUuYWZfc2hvd0RldGFpbEhlYWRlcixINi5hZl9zaG93RGV0YWlsSGVhZGVyLC5PcmFQYWdlU3RhbXBUZXh0LC5hZl9zaW5nbGVTdGVwQnV0dG9uQmFyX2xhYmVsLC5PcmFOYXZCYXJWaWV3T25seSwuUG9ydGxldEhlYWRpbmczLC5Qb3J0bGV0SGVhZGluZzQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2Nn0KKy5hZl9wYW5lbFRpcF9sYWJlbCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfcGFuZWxBY2NvcmRpb25fdG9vbGJhciwucF9PcmFDb250ZW50Rm9vdGVyQ2hpbGRyZW4ge2Zsb2F0OnJpZ2h0fQorLmFmX2RpYWxvZ19jb250YWluZXIsLmFmX3BhbmVsUG9wdXBfY29udGFpbmVyIHtib3JkZXItY29sb3I6IzMzNjYzMztib3JkZXI6MXB4IHNvbGlkO2JhY2tncm91bmQtY29sb3I6d2hpdGV9CisuYWZfZGlhbG9nX3RpdGxlLWJhciwuYWZfcGFuZWxQb3B1cF90aXRsZS1iYXIge2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztib3JkZXItY29sb3I6IzMzNjYzMztib3JkZXItYm90dG9tOjFweCBzb2xpZDtwYWRkaW5nOjJweCAycHggMnB4IDJweH0KKy5hZl9kaWFsb2dfdGl0bGUtdGV4dCwuYWZfcGFuZWxQb3B1cF90aXRsZS10ZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW59CisuYWZfZGlhbG9nX2Nsb3NlLWljb24ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFwdDtmb250LXdlaWdodDpub3JtYWw7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9jbG9zZS5naWYpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtoZWlnaHQ6MTNweDt3aWR0aDoxM3B4fQorLmFmX2RpYWxvZ19jb250ZW50LC5hZl9wYW5lbFBvcHVwX2NvbnRlbnQge2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXI6MHB4fQorLmFmX2lucHV0Q2hvaWNlLnBfQUZEaXNhYmxlZCAuYWZfaW5wdXRDaG9pY2VfbGFiZWwsLmFmX2lucHV0TnVtYmVyU3BpbmJveC5wX0FGRGlzYWJsZWQgLmFmX2lucHV0TnVtYmVyU3BpbmJveF9sYWJlbCwuYWZfaW5wdXRUZXh0LnBfQUZEaXNhYmxlZCAuYWZfaW5wdXRUZXh0X2xhYmVsLC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3gucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RCb29sZWFuQ2hlY2tib3hfbGFiZWwsLmFmX3NlbGVjdEJvb2xlYW5SYWRpby5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdEJvb2xlYW5SYWRpb19sYWJlbCwuYWZfaW5wdXRDb2xvci5wX0FGRGlzYWJsZWQgLmFmX2lucHV0Q29sb3JfbGFiZWwsLmFmX2lucHV0RGF0ZS5wX0FGRGlzYWJsZWQgLmFmX2lucHV0RGF0ZV9sYWJlbCwuYWZfaW5wdXRMaXN0T2ZWYWx1ZXMucF9BRkRpc2FibGVkIC5hZl9pbnB1dExpc3RPZlZhbHVlc19sYWJlbCwuYWZfc2VsZWN0TWFueUNoZWNrYm94LnBfQUZEaXNhYmxlZCAuYWZfc2VsZWN0TWFueUNoZWNrYm94X2xhYmVsLC5hZl9zZWxlY3RNYW55TGlzdGJveC5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdE1hbnlMaXN0Ym94X2xhYmVsLC5hZl9zZWxlY3RPbmVDaG9pY2UucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RPbmVDaG9pY2VfbGFiZWwsLmFmX3NlbGVjdE9uZUxpc3Rib3gucF9BRkRpc2FibGVkIC5hZl9zZWxlY3RPbmVMaXN0Ym94X2xhYmVsLC5hZl9zZWxlY3RPbmVSYWRpby5wX0FGRGlzYWJsZWQgLmFmX3NlbGVjdE9uZVJhZGlvX2xhYmVsLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWluYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIEEge2NvbG9yOiMwMDAwMDB9CisuYWZfaW5wdXROdW1iZXJTcGluYm94X2luY3JlbWVudC1jZWxsLC5hZl9pbnB1dE51bWJlclNwaW5ib3hfZGVjcmVtZW50LWNlbGwge2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDt3aWR0aDoxMXB4O2hlaWdodDo4cHh9CisuYWZfaW5wdXROdW1iZXJTcGluYm94X3NwaW5ib3gtY2VsbCB7cGFkZGluZy1sZWZ0OjFweH0KKy5hZl9tZW51TGlzdF9zZWxlY3RlZCwuT3JhTmF2M1NlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2ZmY2N9CisuYWZfbWVudUNob2ljZV9sYWJlbCwucG9ydGxldC1mb250IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjhwdDtmb250LXdlaWdodDpub3JtYWx9CitCT0RZLC5wb3J0bGV0LXNlY3Rpb24tYm9keSwucG9ydGxldC10YWJsZS1ib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmfQorLmFmX3RyZWVUYWJsZV9wYXRoLXN0ZXAsLmFmX21lbnVQYXRoX3N0ZXAsLmFmX21lbnVQYXRoX3NlbGVjdGVkLXN0ZXAge2NvbG9yOiMwMDMzMzM7Zm9udC1zaXplOjlwdH0KKy5hZl90cmVlVGFibGVfcGF0aC1zZWxlY3RlZC1zdGVwIHtmb250LXNpemU6OXB0O2NvbG9yOiMwMDAwMDB9CisuYWZfcGFuZWxMaXN0IFVMIHttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweH0KKy5hZl9pbnB1dENvbG9yX3N3YXRjaC1vdmVybGF5IHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Oi03cHg7dG9wOjVweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXIge2JhY2tncm91bmQtY29sb3I6I0VGRUZFRjtwYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4fQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1kaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtaW5hY3RpdmUtZGlzYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWRpc2FibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWluYWN0aXZlLWRpc2FibGVkIHtjdXJzb3I6ZGVmYXVsdH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1lbmFibGVkLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWVuYWJsZWQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtaW5hY3RpdmUtZW5hYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUge2N1cnNvcjpwb2ludGVyfQorLmFmX25hdmlnYXRpb25QYW5lX2Jhci1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQge2NvbG9yOiMwMDAwMDA7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2Jhci1pbmFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhOmhvdmVyLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQgYTpob3ZlciwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1pbmFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQgYTpob3ZlciwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IGE6aG92ZXIsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtaW5hY3RpdmUtZW5hYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IGE6aG92ZXIsLkFGQWNjZXNzS2V5U3R5bGUge3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWNvbnRlbnQge2NvbG9yOmdyYXk7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2Jhci1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWluYWN0aXZlLWRpc2FibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1pbmFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWFjdGl2ZS1kaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtaW5hY3RpdmUtZGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZS5wX0FGRGlzYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlLnBfQUZEaXNhYmxlZCAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQge2NvbG9yOmdyYXl9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2J1dHRvbnMtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfbGlzdC1jb250ZW50IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmctdG9wOjNweDtwYWRkaW5nLWJvdHRvbTozcHh9CisuYWZfbmF2aWdhdGlvblBhbmVfYmFyLWNvbnRlbnQgYSwuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1jb250ZW50IGEsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCBhIHt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9iYXItc2VwYXJhdG9yIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmctbGVmdDo2cHg7cGFkZGluZy1yaWdodDo2cHg7Y29sb3I6Z3JheX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWFjdGl2ZS1lbmFibGVkIC5hZl9uYXZpZ2F0aW9uUGFuZV9idXR0b25zLWNvbnRlbnQsLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtYWN0aXZlLWVuYWJsZWQgLmFmX25hdmlnYXRpb25QYW5lX2xpc3QtY29udGVudCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIEEsLkFGTGlua0FjY2Vzc0tleVN0eWxlLC5hZl9pbnB1dERhdGVfc2VsZWN0ZWQsLmFmX2Nob29zZURhdGVfc2VsZWN0ZWQge2ZvbnQtd2VpZ2h0OmJvbGR9CisuYWZfbmF2aWdhdGlvblBhbmVfYnV0dG9ucy1zZXBhcmF0b3Ige2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV9saXN0LWJ1bGxldCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MTdweDtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvbGlzdC1idWxsZXQuZ2lmKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicyB7aGVpZ2h0OjI2cHg7b3ZlcmZsb3c6aGlkZGVufQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlLnBfQUZEaXNhYmxlZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZS5wX0FGRGlzYWJsZWQge2N1cnNvcjpkZWZhdWx0O2NvbG9yOmdyYXl9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydC1qb2luIHtoZWlnaHQ6MjJweDt3aWR0aDoyNnB4O2JhY2tncm91bmQtcG9zaXRpb246dG9wIHJpZ2h0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbi1mcm9tLWFjdGl2ZSwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydC1qb2luLWZyb20taW5hY3RpdmUge2hlaWdodDoyMnB4O3dpZHRoOjE0cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtbWlkIHtoZWlnaHQ6MjJweDtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7cGFkZGluZy1sZWZ0OjNweDt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQtam9pbi10by1pbmFjdGl2ZSB7aGVpZ2h0OjIycHg7d2lkdGg6MTJweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQge2hlaWdodDoyMnB4O3dpZHRoOjE1cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tc3RhcnQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLW1pZCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kIHtoZWlnaHQ6NHB4O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LWNvbnRlbnQge2hlaWdodDo0cHg7d2lkdGg6MTdweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tbWlkLWNvbnRlbnQge2hlaWdodDo0cHh9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kLWNvbnRlbnQge2hlaWdodDo0cHg7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQgQSB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1qb2luIHtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtc3RhcnQtc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydC1qb2luIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1zdGFydC1qb2luLXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tbWlkLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tZW5kIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1ib3QtbWlkLXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLXN0YXJ0LWNvbnRlbnQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLWJvdC1zdGFydC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLW1pZCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtbWlkLXNlbGVjdGVkLmdpZik7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1lbmQtam9pbi10by1pbmFjdGl2ZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtZW5kLWpvaW4tc2VsZWN0ZWQtdG8tZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWVuZCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtZW5kLXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1qb2luLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydCwuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1ib3R0b20tbWlkLC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQsLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYm90dG9tLWVuZC1qb2luIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1ib3QtZGVzZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtY29udGVudCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtYm90LWVuZC1zZWxlY3RlZC5naWYpfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1zdGFydC1jb250ZW50LC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWJvdHRvbS1lbmQtY29udGVudCB7YmFja2dyb3VuZC1pbWFnZTpub25lfQorLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtaW5hY3RpdmUgLmFmX25hdmlnYXRpb25QYW5lX3RhYnMtc3RhcnQtam9pbi1mcm9tLWFjdGl2ZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtc3RhcnQtam9pbi1zZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1zdGFydC1qb2luLWZyb20taW5hY3RpdmUge2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWIzLXN0YXJ0LWpvaW4tZGVzZWxlY3RlZC10by1kZXNlbGVjdGVkLmdpZil9CisuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1pbmFjdGl2ZSAuYWZfbmF2aWdhdGlvblBhbmVfdGFicy1taWQge2NvbG9yOiMwMDAwMDA7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtbWlkLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWVuZC1qb2luLXRvLWluYWN0aXZlIHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiMy1lbmQtam9pbi1kZXNlbGVjdGVkLXRvLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWluYWN0aXZlIC5hZl9uYXZpZ2F0aW9uUGFuZV90YWJzLWVuZCB7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYjMtZW5kLWRlc2VsZWN0ZWQuZ2lmKX0KKy5hZl9wYW5lbEZvcm1MYXlvdXRfY29sdW1uLC5wX09yYVRyZWVJY29uIHt2ZXJ0aWNhbC1hbGlnbjp0b3B9CisuYWZfcGFuZWxGb3JtTGF5b3V0X3NlcGFyYXRvciB7YmFja2dyb3VuZC1jb2xvcjpncmF5O2hlaWdodDoxcHg7Zm9udC1zaXplOjFweDttYXJnaW4tdG9wOjNweDttYXJnaW4tYm90dG9tOjNweH0KKy5hZl9wYW5lbEZvcm1MYXlvdXRfY2VsbCwuYWZfcGFuZWxGb3JtTGF5b3V0X2NvbnRlbnQtY2VsbCwuYWZfcGFuZWxGb3JtTGF5b3V0X21lc3NhZ2UtY2VsbCB7cGFkZGluZzowcHh9CisuYWZfcGFuZWxGb3JtTGF5b3V0X2xhYmVsLXN0YWNrZWQtY2VsbCB7cGFkZGluZzowcHg7dGV4dC1hbGlnbjpsZWZ0fQorLmFmX3BhbmVsQm94X3RyYW5zcGFyZW50IGltZywuYWZfcGFuZWxCb3hfbGlnaHQgaW1nLC5hZl9wYW5lbEJveF9tZWRpdW0gaW1nLC5hZl9wYW5lbEJveF9kYXJrIGltZywuYWZfc2VsZWN0TWFueVNodXR0bGVfYm94LWNvbnRlbnQgaW1nLC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWNvbnRlbnQgaW1nLC5hZl9tZW51QmFyIGltZywuYWZfbWVzc2FnZXMgaW1nLC5hZl9tZW51VGFicyBpbWcge3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0KKy5hZl9wYW5lbEJveF9saWdodCAuYWZfcGFuZWxCb3hfYm9keSwuYWZfc2VsZWN0TWFueVNodXR0bGVfYm94LWNvbnRlbnQgLmFmX3NlbGVjdE1hbnlTaHV0dGxlX2JveC1ib2R5LC5hZl9zZWxlY3RPcmRlclNodXR0bGVfYm94LWNvbnRlbnQgLmFmX3NlbGVjdE9yZGVyU2h1dHRsZV9ib3gtYm9keSwuYWZfcGFuZWxTaWRlQmFyX2JvZHksLk9yYUJHQWNjZW50TGlnaHQsLlBvcnRsZXRCb2R5Q29sb3IsLlBvcnRsZXRTdWJIZWFkZXJDb2xvciwuYWZfbWVzc2FnZXNfYm9keSB7YmFja2dyb3VuZC1jb2xvcjojZTllOGU4fQorLmFmX3BhbmVsQm94X21lZGl1bSAuYWZfcGFuZWxCb3hfYm9keSwuT3JhQkdBY2NlbnRNZWRpdW0ge2JhY2tncm91bmQtY29sb3I6I2ZmZmZjY30KKy5hZl9wYW5lbEJveF9kYXJrIC5hZl9wYW5lbEJveF9ib2R5LC5PcmFCR0FjY2VudERhcmsge2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQ30KKy5hZl9wYW5lbEJveF9oZWFkZXIsLlBvcnRsZXRIZWFkZXJDb2xvciB7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0KKy5hZl9wYW5lbEJveF9saWdodCAuYWZfcGFuZWxCb3hfaGVhZGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiM5OWNjOTk7Y29sb3I6I2ZmZmZmZn0KKy5hZl9wYW5lbFBhZ2VfY29weXJpZ2h0LC5hZl9wYW5lbFBhZ2VfcHJpdmFjeSwuYWZfcGFuZWxQYWdlX2Fib3V0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjhwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfcGFuZWxQYWdlX2NvcHlyaWdodCBBLC5hZl9wYW5lbFBhZ2VfcHJpdmFjeSBBLC5hZl9wYW5lbFBhZ2VfYWJvdXQgQSwuYWZfdHJhaW5fbGluaywuYWZfcGFuZWxUYWJiZWRfdGFiIEEsLnBfT3JhVHJlZVJvdyBBOmxpbmssLnBfT3JhVHJlZVJvdyBBOmFjdGl2ZSwucF9PcmFUcmVlUm93IEE6dmlzaXRlZCB7Y29sb3I6IzAwMzMzM30KKy5hZl9wYW5lbENhcHRpb25Hcm91cCB7Ym9yZGVyLWNvbG9yOiNlOWU4ZTh9CisuYWZfcGFuZWxDYXB0aW9uR3JvdXBfY2FwdGlvbiwuT3JhUGFnZVN0YW1wTGFiZWwsLk9yYVRhYmxlQ29udHJvbEJhclRleHQsLnBfT3JhVHJlZVJvd1NlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNjY5OTY2fQorLmFmX3BhbmVsUG9wdXBfdHJpZ2dlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAzMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9wYW5lbFBvcHVwX2Nsb3NlLWljb24ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFwdDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLWxlZnQ6NXB4fQorLmFmX21lbnVCYXIge2JhY2tncm91bmQtY29sb3I6IzY2OTk2Njtjb2xvcjojZmZmZmZmO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7bWluLWhlaWdodDo0cHh9CisuYWZfbWVudUJhcl9lbmFibGVkLC5hZl9tZW51QmFyX3NlbGVjdGVkIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vd3JhcH0KKy5hZl9tZW51QmFyX2VuYWJsZWQgQSwuYWZfbWVudUJhcl9zZWxlY3RlZCBBIHtjb2xvcjojZmZmZmZmfQorLmFmX21lbnVCYXJfc2VwYXJhdG9yIHtjb2xvcjojZmZmZmZmO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWx9CisuYWZfdHJlZVRhYmxlX2V4cGFuc2lvbiB7Y29sb3I6IzY2OTk2Njtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MHB4O2xlZnQ6LTE4cHh9CisuYWZfdHJlZVRhYmxlX2ZvY3VzIHtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2Njtmb250LWZhbWlseTptb25vc3BhY2V9CisuYWZfdHJlZVRhYmxlX2xvY2F0b3Ige2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0KKy5hZl9zaG93T25lUGFuZWxfY29udGFpbmVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItd2lkdGg6MHB4IDFweCAxcHggMXB4O2JvcmRlci1zdHlsZTpzb2xpZH0KKy5hZl9zaG93T25lUGFuZWxfaGVhZGVyLWNvbGxhcHNlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7aGVpZ2h0OjIxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctcmlnaHQ6NXB4O2JvcmRlci13aWR0aDoxcHggMHB4IDBweCAwcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2N1cnNvcjpwb2ludGVyO3BhZGRpbmctbGVmdDo1cHh9CisuYWZfc2hvd09uZVBhbmVsX2hlYWRlci1leHBhbmRlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7aGVpZ2h0OjIxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctcmlnaHQ6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAxcHggMHB4O3BhZGRpbmctbGVmdDoycHh9CisuYWZfc2hvd09uZVBhbmVsX2hlYWRlci1kaXNhYmxlZCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7aGVpZ2h0OjIxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctcmlnaHQ6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAwcHggMHB4O3BhZGRpbmctbGVmdDoxOHB4fQorLmFmX3Nob3dPbmVQYW5lbF9jb250ZW50IHt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWFyZ2luOjVweH0KKy5hZl9zaG93T25lUGFuZWxfdGl0bGUtbGluayB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiM2Njk5NjY7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDoycHg7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfc2hvd09uZVBhbmVsX3RpdGxlLWRpc2FibGVkLWxpbmsge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6Izk5OTk5OTtkaXNwbGF5OmJsb2NrO3BhZGRpbmctdG9wOjJweDt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5BRkhlYWRlckxldmVsT25lLEgxLmFmX3BhbmVsSGVhZGVyLEgxLmFmX3Nob3dEZXRhaWxIZWFkZXIsLmFmX21lc3NhZ2VzX2hlYWRlciwuUG9ydGxldEhlYWRlclRleHQsLlBvcnRsZXRIZWFkaW5nMSwuUG9ydGxldFN1YkhlYWRlclRleHQsLnBvcnRsZXQtc2VjdGlvbi1oZWFkZXIsLnBvcnRsZXQtc2VjdGlvbi1zdWJoZWFkZXIsLnBvcnRsZXQtdGFibGUtaGVhZGVyLC5wb3J0bGV0LXRhYmxlLXN1YmhlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjY5OTY2fQorLkFGSGVhZGVyTGV2ZWxUd28sSDIuYWZfcGFuZWxIZWFkZXIsSDIuYWZfc2hvd0RldGFpbEhlYWRlciwuUG9ydGxldEhlYWRpbmcyIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiM2Njk5NjZ9CisuYWZfcGFuZWxIZWFkZXJfZXJyb3IsLmFmX21lc3NhZ2VzX2Vycm9yLC5wb3J0bGV0LW1zZy1lcnJvciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojY2MwMDAwfQorLmFmX21lc3NhZ2VzIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMzMzY2MzM7d2lkdGg6MTAwJX0KKy5hZl9tZXNzYWdlc19tZXNzYWdlLXRleHQsLmFmX21lc3NhZ2VzX2xpc3QsLnBvcnRsZXQtbXNnLWluZm8ge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2NjttYXJnaW46MHB4IDBweCAwcHggMHB4O3BhZGRpbmc6NXB4IDMwcHggNXB4IDMwcHh9CisuYWZfcGFuZWxTaWRlQmFyIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMzMzY2MzM7Ym9yZGVyLWNvbG9yOiM5OTk5OTl9CisuQUZTb3J0YWJsZUhlYWRlclNvcnRJY29uIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjlwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2Nn0KKy5hZl9tZW51VGFic19lbmFibGVkIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7d2hpdGUtc3BhY2U6bm93cmFwfQorLmFmX21lbnVUYWJzX3NlbGVjdGVkIHtiYWNrZ3JvdW5kLWNvbG9yOiM2Njk5NjY7d2hpdGUtc3BhY2U6bm93cmFwfQorLmFmX21lbnVUYWJzX2Rpc2FibGVkIHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Y29sb3I6Izk5OTk5OTt3aGl0ZS1zcGFjZTpub3dyYXB9CisuYWZfbWVudVRhYnNfZW5hYmxlZCBBIHtjb2xvcjojMzM2NjMzfQorLmFmX21lbnVUYWJzX3NlbGVjdGVkIEEge2NvbG9yOiNjY2ZmY2N9CisuYWZfbWVudVRhYnNfc2VwYXJhdG9yIHt3aWR0aDowcHh9CisuYWZfdGFibGVfY29udGVudCwuYWZfdHJlZVRhYmxlX2NvbnRlbnQge2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5hZl90YWJsZV9jb250cm9sLWJhci10b3AsLmFmX3RyZWVUYWJsZV9jb250cm9sLWJhci10b3Age2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4O3BhZGRpbmc6MXB4IDJweH0KKy5hZl90YWJsZV9jb250cm9sLWJhci1ib3R0b20sLmFmX3RyZWVUYWJsZV9jb250cm9sLWJhci1ib3R0b20ge2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHggMXB4O3BhZGRpbmc6MXB4IDJweH0KKy5hZl90YWJsZV9zdWItY29udHJvbC1iYXIsLmFmX3RyZWVUYWJsZV9zdWItY29udHJvbC1iYXIge2JvcmRlci1jb2xvcjojOTk5OTk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDFweCAwcHg7cGFkZGluZzoxcHggMnB4fQorLmFmX2NvbHVtbl9jZWxsLXRleHQsLnBvcnRsZXQtc2VjdGlvbi1zZWxlY3RlZCwucG9ydGxldC10YWJsZS1zZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OX0KKy5hZl9jb2x1bW5fY2VsbC10ZXh0LWJhbmQsLnBvcnRsZXQtc2VjdGlvbi1hbHRlcm5hdGUsLnBvcnRsZXQtdGFibGUtYWx0ZXJuYXRlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlci1jb2xvcjojOTk5OTk5fQorLmFmX2NvbHVtbl9jZWxsLW51bWJlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtY29sb3I6I2U5ZThlODtib3JkZXItY29sb3I6Izk5OTk5OTt0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MnB4fQorLmFmX2NvbHVtbl9jZWxsLW51bWJlci1iYW5kIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlci1jb2xvcjojOTk5OTk5O3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1yaWdodDoycHh9CisuYWZfY29sdW1uX2NlbGwtaWNvbi1mb3JtYXQsLmFmX3RhYmxlU2VsZWN0T25lX2NlbGwtaWNvbi1mb3JtYXQsLmFmX3RhYmxlU2VsZWN0TWFueV9jZWxsLWljb24tZm9ybWF0LC5PcmFUYWJsZUNlbGxTZWxlY3QsLnBvcnRsZXQtc2VjdGlvbi10ZXh0LC5wb3J0bGV0LXRhYmxlLXRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzAwMDAwMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7dGV4dC1hbGlnbjpjZW50ZXJ9CisuYWZfY29sdW1uX2NlbGwtaWNvbi1mb3JtYXQtYmFuZCwuYWZfdGFibGVTZWxlY3RPbmVfY2VsbC1pY29uLWZvcm1hdC1iYW5kLC5hZl90YWJsZVNlbGVjdE1hbnlfY2VsbC1pY29uLWZvcm1hdC1iYW5kLC5PcmFUYWJsZUNlbGxTZWxlY3RCYW5kIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlci1jb2xvcjojOTk5OTk5O3RleHQtYWxpZ246Y2VudGVyfQorLmFmX2NvbHVtbl9oZWFkZXItdGV4dCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0KKy5hZl9jb2x1bW5faGVhZGVyLW51bWJlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO3RleHQtYWxpZ246cmlnaHR9CisuYWZfY29sdW1uX2hlYWRlci1pY29uLWZvcm1hdCB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO3RleHQtYWxpZ246Y2VudGVyfQorLmFmX2NvbHVtbl9yb3ctaGVhZGVyLXRleHQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjZ9CisuYWZfdGFibGVfZGV0YWlsIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmfQorLmFmX3RhYmxlX2NvbHVtbi1mb290ZXIsLnBvcnRsZXQtc2VjdGlvbi1mb290ZXIsLnBvcnRsZXQtdGFibGUtZm9vdGVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjZ9CisuT3JhVGFibGVUb3RhbCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0NDQ0M7Y29sb3I6IzY2OTk2Nn0KKy5hZl9jb2x1bW5fdG90YWwtbnVtYmVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojMDAwMDAwO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfQorLmFmX2NvbHVtbl90b3RhbC10ZXh0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiMwMDAwMDA7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9CisuYWZfY29sdW1uX3NvcnRhYmxlLWhlYWRlci10ZXh0IHtib3JkZXItY29sb3I6Izk5OTk5OTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO2N1cnNvcjpwb2ludGVyO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOm91dHNldH0KKy5hZl9jb2x1bW5fc29ydGFibGUtaGVhZGVyLW51bWJlciB7Ym9yZGVyLWNvbG9yOiM5OTk5OTk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2NvbG9yOiM2Njk5NjY7dmVydGljYWwtYWxpZ246Ym90dG9tO2N1cnNvcjpwb2ludGVyO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOm91dHNldDt0ZXh0LWFsaWduOnJpZ2h0fQorLmFmX2NvbHVtbl9zb3J0YWJsZS1oZWFkZXItaWNvbi1mb3JtYXQge2JvcmRlci1jb2xvcjojOTk5OTk5O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I0NDQ0NDQztjb2xvcjojNjY5OTY2O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtjdXJzb3I6cG9pbnRlcjtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpvdXRzZXQ7dGV4dC1hbGlnbjpjZW50ZXJ9CisuYWZfdHJhaW5fc3RvcC5wX0FGU2VsZWN0ZWQge2NvbG9yOiM2Njk5NjY7Zm9udC13ZWlnaHQ6Ym9sZH0KKy5hZl90cmFpbl9zdG9wOnZpc2l0ZWQsLmFmX3RyYWluX3N0b3A6dmlzaXRlZCAuYWZfdHJhaW5fbGluayB7Y29sb3I6IzY2NjY2Nn0KKy5hZl90cmFpbl9zdG9wLnBfQUZEaXNhYmxlZCwuYWZfcGFuZWxUYWJiZWRfdGFiIC5wX09yYURpc2FibGVkIHtjb2xvcjojOTk5OTk5fQorLmFmX3RyYWluX3N0b3AucF9BRlVudmlzaXRlZCwucF9PcmFDb250ZW50Rm9vdGVyUnVsZSB7Y29sb3I6IzY2OTk2Nn0KKy5hZl90cmFpbl9zdG9wLnBfQUZEaXNhYmxlZCAuYWZfdHJhaW5fbGluayB7Y29sb3I6IzY2OTk5OX0KKy5PcmFCR0NvbG9yVmVyeURhcmsge2JhY2tncm91bmQtY29sb3I6IzMzNjYzM30KKy5PcmFCR0NvbG9yRGFyaywuYWZfbWVudUJhcl9ib2R5LC5hZl9tZW51QmFyX3RpdGxlLC5hZl9tZW51QmFyX2VtcHR5IHtiYWNrZ3JvdW5kLWNvbG9yOiM2Njk5NjZ9CisuT3JhQkdDb2xvck1lZGl1bSB7YmFja2dyb3VuZC1jb2xvcjojOTljYzk5fQorLk9yYUJHQ29sb3JMaWdodCB7YmFja2dyb3VuZC1jb2xvcjojY2NmZmNjfQorLk9yYUJHR3JheVZlcnlEYXJrIHtiYWNrZ3JvdW5kLWNvbG9yOiMzMzMzMzN9CisuT3JhQkdHcmF5RGFyayB7YmFja2dyb3VuZC1jb2xvcjojNjY2NjY2fQorLk9yYUJHR3JheU1lZGl1bSwuT3JhQkdBY2NlbnRWZXJ5RGFyaywuT3JhVGFibGUge2JhY2tncm91bmQtY29sb3I6Izk5OTk5OX0KKy5PcmFCR0dyYXlMaWdodCB7YmFja2dyb3VuZC1jb2xvcjojY2NjY2NjfQorLk9yYUlubGluZUluZm9UZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjhwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6IzY2OTk2Nn0KKy5PcmFUZXh0SW5saW5lIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjhwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6Izk5Y2M5OX0KKy5PcmFNZXNzYWdlQm94RXJyb3JUZXh0LC5BRkVycm9yVGV4dCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojY2MwMDAwfQorLk9yYUVycm9yTmFtZVRleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNjYzAwMDB9CisuT3JhSW5saW5lRXJyb3JUZXh0IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjhwdDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6I2NjMDAwMH0KKy5PcmFHbG9iYWxQYWdlVGl0bGUge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNwdDtjb2xvcjojZmZmZmZmO2ZvbnQtd2VpZ2h0OmJvbGR9CisucF9PcmFTZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojY2NmZmNjO3RleHQtZGVjb3JhdGlvbjpub25lfQorLnBfT3JhSGlkZGVuTGFiZWwge3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTk5cHg7bGVmdDowcHg7Zm9udC1zaXplOjBweH0KKy5wX09yYUNvbG9yRmllbGRTd2F0Y2gge2JvcmRlci1jb2xvcjojMDAwMDAwO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4fQorLnBfT3JhQ29sb3JQYWxldHRlIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDB9CisucF9PcmFDb2xvclBhbGV0dGVFbXB0eUNlbGwge2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZn0KKy5hZl9pbnB1dERhdGVfbmF2IEEsLmFmX2Nob29zZURhdGVfbmF2IEEge2NvbG9yOiMwMDMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CisuYWZfaW5wdXREYXRlX3RpdGxlLC5hZl9jaG9vc2VEYXRlX3RpdGxlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtjb2xvcjojNjY5OTY2O3BhZGRpbmc6MnB4fQorLmFmX2lucHV0RGF0ZV9oZWFkZXIsLmFmX2Nob29zZURhdGVfaGVhZGVyIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNjY5OTY2O3BhZGRpbmc6MnB4fQorLmFmX2lucHV0RGF0ZV9jb250ZW50IEEsLmFmX2Nob29zZURhdGVfY29udGVudCBBIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiMwMDMzMzN9CisuYWZfY2hvb3NlRGF0ZV9jb250ZW50IHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM5OTk5OTk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7cGFkZGluZzoycHh9CisucF9PcmFDb250ZW50Rm9vdGVyU3RhcnQge2Zsb2F0OmxlZnR9CisucF9PcmFDb250ZW50Rm9vdGVyQm90dG9tIHtjbGVhcjpib3RoO21hcmdpbi1ib3R0b206NXB4fQorLnBfT3JhRm9vdGVyIHt0ZXh0LWFsaWduOmNlbnRlcn0KKy5wX09yYUZvb3RlckJvdHRvbSB7cGFkZGluZy10b3A6NXB4fQorLnBfT3JhSGVhZGVyTmVzdCB7bWFyZ2luOjVweCAwcHggMHB4IDEycHh9CisuT3JhSEdyaWRMb2NhdG9ySGVhZGVyIHtib3JkZXItY29sb3I6Izk5OTk5OTtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTh9CisucF9PcmFIaWRlU2hvd0Rpc2Nsb3NlZFN5bWJvbCwuYWZfcGFuZWxUYWJiZWRfdGFiLXNlbGVjdGVkIEEsLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCBBOmxpbmssLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCBBOmFjdGl2ZSwucF9PcmFUcmVlRGlzY2xvc2VkU3ltYm9sIEE6dmlzaXRlZCwucF9PcmFUcmVlUm93U2VsZWN0ZWQgQTpsaW5rLC5wX09yYVRyZWVSb3dTZWxlY3RlZCBBOmFjdGl2ZSwucF9PcmFUcmVlUm93U2VsZWN0ZWQgQTp2aXNpdGVkIHtjb2xvcjojNjY5OTY2O3RleHQtZGVjb3JhdGlvbjpub25lfQorLmFmX21lc3NhZ2VzX2xpc3Qtc2luZ2xlIHtsaXN0LXN0eWxlLXR5cGU6bm9uZX0KKy5wX09yYVF1aWNrU2VhcmNoQm94IHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWU4ZTg7Ym9yZGVyLWNvbG9yOiNDQ0NDQ0M7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6MHB0IDVwdCA1cHQgNXB0O2JvcmRlci13aWR0aDowcHggMHB4IDFweCAxcHh9CisucF9PcmFHbG9iYWxRdWljayB7Ym9yZGVyLWNvbG9yOiNDQ0NDQ0M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMHB4IDBweCAxcHh9CisucF9PcmFQcm9jZXNzaW5nU3RhdHVzIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNjY5OTY2O2JvcmRlci1jb2xvcjojOTljYzk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4fQorLnBfT3JhUHJvZHVjdEJyYW5kaW5nVGV4dCB7Y29sb3I6IzY2OTk2Njtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LWZhbWlseTpHYXJhbW9uZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgU2VyaWY7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyNHB0O2xpbmUtaGVpZ2h0OjI4LjhwdDt0b3A6LTQuOHB0fQorLnBfT3JhUHJvZHVjdEJyYW5kaW5nQ29tcGFjdFRleHQge2NvbG9yOiM2Njk5NjY7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B0O21hcmdpbi1ib3R0b206MHB4O21hcmdpbi10b3A6MHB4O2ZvbnQtd2VpZ2h0OmJvbGR9CisuT3JhU2h1dHRsZUhlYWRlciB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo5cHQ7Y29sb3I6IzY2OTk2Njtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6MHB4IDBweCAwcHggMThweH0KKy5PcmFTaHV0dGxlTGlua1RleHQge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6OXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojMDAzMzMzfQorLnBfT3JhU2lkZUJhck1pbldpZHRoIHt3aWR0aDoxNDBweH0KKy5PcmFTdHlsZWRMaXN0IHtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTtwYWRkaW5nOjBweDttYXJnaW46MHB4fQorLk9yYVN0eWxlZExpc3QgLk9yYVN0eWxlZExpc3Qge3BhZGRpbmc6MHB0IDBwdCAwcHQgMTBwdH0KKy5hZl9wYW5lbFRhYmJlZF90YWIge2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxHZW5ldmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDtmb250LXdlaWdodDpub3JtYWw7cGFkZGluZzowcHggOHB4fQorLmFmX3BhbmVsVGFiYmVkX3RhYi1zZWxlY3RlZCB7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLEdlbmV2YSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB0O2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZzowcHggOHB4fQorLmFmX3BhbmVsVGFiYmVkX2NlbGwtc3RhcnQge3dpZHRoOjAlfQorLmFmX3BhbmVsVGFiYmVkX2NlbGwtZW5kIHt3aWR0aDoxMDAlfQorLk9yYVRhYmxlQm9yZGVyMDAwMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMHB4IDBweCAxcHh9CisuT3JhVGFibGVCb3JkZXIwMDEwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAwcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMDAxMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMHB4IDFweCAxcHh9CisuT3JhVGFibGVCb3JkZXIwMTAwIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjBweCAxcHggMHB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjAxMDEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjAxMTAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MHB4IDFweCAxcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMDExMSB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowcHggMXB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjEwMDAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAwcHh9CisuT3JhVGFibGVCb3JkZXIxMDAxIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwcHggMHB4IDFweH0KKy5PcmFUYWJsZUJvcmRlcjEwMTAge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweH0KKy5PcmFUYWJsZUJvcmRlcjEwMTEge2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4IDBweCAxcHggMXB4fQorLk9yYVRhYmxlQm9yZGVyMTEwMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDBweCAwcHh9CisuT3JhVGFibGVCb3JkZXIxMTAxIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMHB4fQorLk9yYVRhYmxlQm9yZGVyMTExMCB7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHggMXB4IDFweCAwcHh9CisuT3JhVGFibGVCb3JkZXIxMTExIHtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweH0KKy5PcmFUYWJsZVRpdGxlIHtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtjb2xvcjojNjY5OTY2fQorLnBfT3JhVHJlZURpc2Nsb3NlZFN5bWJvbCB7Y29sb3I6IzY2OTk2Njtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsR2VuZXZhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246cmlnaHR9CisucF9PcmFUcmVlTm9kZUFkanVzdCB7cGFkZGluZy1ib3R0b206MnB4fQorLmFmX2NoYXJ0IHt3aWR0aDo0MDBweDtoZWlnaHQ6MzAwcHg7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZX0KKy5wX09yYU9uZVBpeGVsTGluZSB7YmFja2dyb3VuZC1jb2xvcjojQ0NDQ0NDO2ZvbnQtc2l6ZTowcHQ7b3ZlcmZsb3c6aGlkZGVuO2hlaWdodDoxcHg7d2lkdGg6MTAwJX0KKy5wX09yYURpc3BsYXlCbG9jayB7ZGlzcGxheTpibG9ja30KKy5wX09yYUhpZGVTa2lwTmF2aVRleHQge2ZvbnQtc2l6ZTowcHQ7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWxlZnQ6LTk5OXB4fQorLlBvcnRsZXRIZWFkZXJMaW5rLC5Qb3J0bGV0U3ViSGVhZGVyTGluayB7Y29sb3I6I2ZmZmZmZjt0ZXh0LWRlY29yYXRpb246bm9uZX0KKy5BRkxvZ28ge3dpZHRoOjEwM3B4O2hlaWdodDoxM3B4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2xvZ28tZGFyay5naWYpfQorYm9keSB7bWFyZ2luLXRvcDo4cHh9CisucF9PcmFOYXYyIHtib3JkZXItY29sb3I6Izk5Y2M5OX0KKy5hZl9uYXZpZ2F0aW9uUGFuZSB7aGVpZ2h0OjI1cHh9CisvKiBUaGUgbnVtYmVyIG9mIENTUyBzZWxlY3RvcnMgaW4gdGhpcyBmaWxlIGlzIDU0OCAqLwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvanNwc2VhcmNoLzI0NTQyNzM1OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL2pzcHNlYXJjaC8yNDU0MjczNTguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3YzA1MgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlL2pzcHNlYXJjaC8yNDU0MjczNTguaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvanNwc2VhcmNoLzI1MTQ3NjEzNjkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS9qc3BzZWFyY2gvMjUxNDc2MTM2OS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk1NWYwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvanNwc2VhcmNoLzI1MTQ3NjEzNjkuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMTk4MzA2MDQ5OC5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS90YWdsaWJpbmRleC8xOTgzMDYwNDk4LmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZjMTkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMTk4MzA2MDQ5OC5kYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjAwMjQ1ODIyMS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS90YWdsaWJpbmRleC8yMDAyNDU4MjIxLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZjMTkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjAwMjQ1ODIyMS5kYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjk0Mzg1MTk2NS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS90YWdsaWJpbmRleC8yOTQzODUxOTY1LmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZjMTkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjk0Mzg1MTk2NS5kYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjk1ODkzNTMxNi5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS90YWdsaWJpbmRleC8yOTU4OTM1MzE2LmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZjMTkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMjk1ODkzNTMxNi5kYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMzkwMDM5NzUzOS5kYXQgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS90YWdsaWJpbmRleC8zOTAwMzk3NTM5LmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZjMTkyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUvdGFnbGliaW5kZXgvMzkwMDM5NzUzOS5kYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhMGI3NwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUvSkFYUlNMaWJyYXJ5UmVnaXN0cnkueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMuY29yZS9KQVhSU0xpYnJhcnlSZWdpc3RyeS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhNDQxYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuanN0LndzLmpheHJzLmNvcmUvSkFYUlNMaWJyYXJ5UmVnaXN0cnkueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQVNDSUkiPz4KKzxqYXhyc2xpYnJlZzpKQVhSU0xpYnJhcnlSZWdpc3RyeSB4bWxuczpqYXhyc2xpYnJlZz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9qYXhycy9zY2hlbWEvamF4cnNsaWJyYXJ5cmVnaXN0cnkueHNkIi8+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC53cy5qYXhycy51aS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EwYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Qud3MuamF4cnMudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhNjViYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO2dsZW1tJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7Z2xlbW0mYXBvczsiIGVsZW1lbnQxPSIvZ2xlbW0iIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NDI2NTA3Mzk3MSIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R0xFTU0tU2VydmljZSZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dMRU1NLVNlcnZpY2UmYXBvczsiIGVsZW1lbnQxPSIvR0xFTU0tU2VydmljZSIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTc0MjY1MTU4ODUyIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHTEVNTS1TZXJ2aWNlcyZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dMRU1NLVNlcnZpY2VzJmFwb3M7IiBlbGVtZW50MT0iL0dMRU1NLVNlcnZpY2VzIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzQyNjUxNjQ1NDIiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7IiBlbGVtZW50MT0iL0dsZW1tU2VydmljZXMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NDI2NTE2ODUyMSIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsiIGVsZW1lbnQxPSIvR2xlbW1TZXJ2aWNlcyIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTc0MjY1NTkzNzY4Ii8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztHdWVzdCZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0d1ZXN0JmFwb3M7IiBlbGVtZW50MT0iL0d1ZXN0IiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzQyNjU1OTk0NjciLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dMRU1NLVNlcnZpY2VzJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R0xFTU0tU2VydmljZXMmYXBvczsiIGVsZW1lbnQxPSIvR0xFTU0tU2VydmljZXMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NDMyNTg4NjE1MyIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7Z2xlbW0mYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztnbGVtbSZhcG9zOyIgZWxlbWVudDE9Ii9nbGVtbSIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNTc0MzI1OTExNzc2Ii8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDE5LzExLzQ3L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRmNmQwCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSw4IEBACisxNTc0MjY1MDczOTcxCURlbGV0ZSByZXNvdXJjZSAnZ2xlbW0nCisxNTc0MjY1MTU4ODUyCURlbGV0ZSByZXNvdXJjZSAnR0xFTU0tU2VydmljZScKKzE1NzQyNjUxNjQ1NDIJRGVsZXRlIHJlc291cmNlICdHTEVNTS1TZXJ2aWNlcycKKzE1NzQyNjUxNjg1MjEJRGVsZXRlIHJlc291cmNlICdHbGVtbVNlcnZpY2VzJworMTU3NDI2NTU5Mzc2OAlEZWxldGUgcmVzb3VyY2UgJ0dsZW1tU2VydmljZXMnCisxNTc0MjY1NTk5NDY3CURlbGV0ZSByZXNvdXJjZSAnR3Vlc3QnCisxNTc0MzI1ODg2MTUzCURlbGV0ZSByZXNvdXJjZSAnR0xFTU0tU2VydmljZXMnCisxNTc0MzI1OTExNzc2CURlbGV0ZSByZXNvdXJjZSAnZ2xlbW0nCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjODUyMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7SnNvblRyYXZlcnNlJmFwb3M7IiBkZWxldGVDb250ZW50cz0idHJ1ZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztKc29uVHJhdmVyc2UmYXBvczsiIGVsZW1lbnQxPSIvSnNvblRyYXZlcnNlIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1ODc1NzcxMTMzODAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iUmVuYW1lIHJlc291cmNlICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsgdG8gJmFwb3M7d2Zvcm1TZXJ2aWNlcy13cm9uZyZhcG9zOyIgZGVzY3JpcHRpb249IlJlbmFtZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7IiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnJlbmFtZS5yZXNvdXJjZSIgaW5wdXQ9Ii93Zm9ybVNlcnZpY2VzIiBuYW1lPSJ3Zm9ybVNlcnZpY2VzLXdyb25nIiBzdGFtcD0iMTU4Nzc0MTA5NTQ5OCIgdXBkYXRlUmVmZXJlbmNlcz0idHJ1ZSIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJSZW5hbWUgcmVzb3VyY2UgJmFwb3M7d2Zvcm1TZXJ2aWNlczImYXBvczsgdG8gJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyIgZGVzY3JpcHRpb249IlJlbmFtZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzMiZhcG9zOyIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5yZW5hbWUucmVzb3VyY2UiIGlucHV0PSIvd2Zvcm1TZXJ2aWNlczIiIG5hbWU9Indmb3JtU2VydmljZXMiIHN0YW1wPSIxNTg3NzQxMTA4NDk1IiB1cGRhdGVSZWZlcmVuY2VzPSJ0cnVlIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzLXdyb25nJmFwb3M7IiBkZWxldGVDb250ZW50cz0idHJ1ZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzLXdyb25nJmFwb3M7IiBlbGVtZW50MT0iL3dmb3JtU2VydmljZXMtd3JvbmciIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU4Nzc0Mjc2OTU0MCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MGIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsNCBAQAorMTU4NzU3NzExMzM4MAlEZWxldGUgcmVzb3VyY2UgJ0pzb25UcmF2ZXJzZScKKzE1ODc3NDEwOTU0OTgJUmVuYW1lIHJlc291cmNlICd3Zm9ybVNlcnZpY2VzJworMTU4Nzc0MTEwODQ5NQlSZW5hbWUgcmVzb3VyY2UgJ3dmb3JtU2VydmljZXMyJworMTU4Nzc0Mjc2OTU0MAlEZWxldGUgcmVzb3VyY2UgJ3dmb3JtU2VydmljZXMtd3JvbmcnCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxZDJmNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGNvbW1lbnQ9IlJlbmFtZSBKYXZhIHByb2plY3QgJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsgdG8gJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsmI3gwRDsmI3gwQTstIFJlbmFtZWQgZWxlbWVudDogJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsmI3gwRDsmI3gwQTstIFVwZGF0ZSByZWZlcmVuY2VzIHRvIHJlZmFjdG9yZWQgZWxlbWVudCIgZGVzY3JpcHRpb249IlJlbmFtZSBKYXZhIHByb2plY3QgJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLnJlbmFtZS5qYXZhLnByb2plY3QiIGlucHV0PSI9R2xlbW1TZXJ2aWNlczIiIG5hbWU9IkdsZW1tU2VydmljZXMiIHJlZmVyZW5jZXM9InRydWUiIHN0YW1wPSIxNTkyNDE3MzM2MjgzIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI4NDZjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxIEBACisxNTkyNDE3MzM2MjgzCVJlbmFtZSBKYXZhIHByb2plY3QgJ0dsZW1tU2VydmljZXMyJwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMS85LzM5L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzLy53b3Jrc3BhY2UvMjAyMS85LzM5L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTMyNGYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIxLzkvMzkvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R2xlbW1DbGllbnQmYXBvczsiIGVsZW1lbnQxPSIvR2xlbW1DbGllbnQiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzMjgxMzcyMTIyMyIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyIgZGVsZXRlQ29udGVudHM9ImZhbHNlIiBkZXNjcmlwdGlvbj0iRGVsZXRlIHJlc291cmNlICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsiIGVsZW1lbnQxPSIvR2xlbW1TZXJ2aWNlcyIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNjMyODEzOTczNzEyIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztKc29uVHJhdmVyc2UmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztKc29uVHJhdmVyc2UmYXBvczsiIGVsZW1lbnQxPSIvSnNvblRyYXZlcnNlIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE2MzI4MTUxMTI5MTgiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO1Rlc3RzJmFwb3M7IiBkZWxldGVDb250ZW50cz0iZmFsc2UiIGRlc2NyaXB0aW9uPSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7VGVzdHMmYXBvczsiIGVsZW1lbnQxPSIvVGVzdHMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzMjgxNTE1NTc0NyIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJEZWxldGUgcmVzb3VyY2UgJmFwb3M7VXRpbHMmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvcztVdGlscyZhcG9zOyIgZWxlbWVudDE9Ii9VdGlscyIgZmxhZ3M9IjciIGlkPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5kZWxldGUucmVzb3VyY2VzIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNjMyODE1MTg1MTU3Ii8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9IkRlbGV0ZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VKYXImYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VKYXImYXBvczsiIGVsZW1lbnQxPSIvd2Zvcm1TZXJ2aWNlSmFyIiBmbGFncz0iNyIgaWQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmRlbGV0ZS5yZXNvdXJjZXMiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE2MzI4MTUyMTMxMjMiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iRGVsZXRlIHJlc291cmNlICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsiIGRlbGV0ZUNvbnRlbnRzPSJmYWxzZSIgZGVzY3JpcHRpb249IkRlbGV0ZSByZXNvdXJjZSAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7IiBlbGVtZW50MT0iL3dmb3JtU2VydmljZXMiIGZsYWdzPSI3IiBpZD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZGVsZXRlLnJlc291cmNlcyIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTYzMjgxNTIzMTE5NiIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy8ud29ya3NwYWNlLzIwMjEvOS8zOS9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIxLzkvMzkvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjM0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvLndvcmtzcGFjZS8yMDIxLzkvMzkvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsNyBAQAorMTYzMjgxMzcyMTIyMwlEZWxldGUgcmVzb3VyY2UgJ0dsZW1tQ2xpZW50JworMTYzMjgxMzk3MzcxMglEZWxldGUgcmVzb3VyY2UgJ0dsZW1tU2VydmljZXMnCisxNjMyODE1MTEyOTE4CURlbGV0ZSByZXNvdXJjZSAnSnNvblRyYXZlcnNlJworMTYzMjgxNTE1NTc0NwlEZWxldGUgcmVzb3VyY2UgJ1Rlc3RzJworMTYzMjgxNTE4NTE1NwlEZWxldGUgcmVzb3VyY2UgJ1V0aWxzJworMTYzMjgxNTIxMzEyMwlEZWxldGUgcmVzb3VyY2UgJ3dmb3JtU2VydmljZUphcicKKzE2MzI4MTUyMzExOTYJRGVsZXRlIHJlc291cmNlICd3Zm9ybVNlcnZpY2VzJwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tQ2xpZW50LzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbUNsaWVudC8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1NGU4NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbUNsaWVudC8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7R2xlbW1DbGllbnQmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztHbGVtbUNsaWVudC9zcmMvR2xlbW1DbGllbnRTcmMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMmbHQ7R2xlbW1DbGllbnRTcmMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4NzU1MTcyNjAwMSIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7R2xlbW1DbGllbnQmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztHbGVtbUNsaWVudC9zcmMvR2xlbW1DbGllbnRTcmMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMmbHQ7R2xlbW1DbGllbnRTcmMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4NzU1MTc4OTI3NSIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7R2xlbW1DbGllbnQmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztHbGVtbUNsaWVudC9zcmMvR2xlbW1DbGllbnRTcmMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMmbHQ7R2xlbW1DbGllbnRTcmMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4NzU1MTgyNzcxNiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbUNsaWVudC8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTNhYmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDMgQEAKKzE1ODc1NTE3MjYwMDEJRGVsZXRlIGVsZW1lbnQKKzE1ODc1NTE3ODkyNzUJRGVsZXRlIGVsZW1lbnQKKzE1ODc1NTE4Mjc3MTYJRGVsZXRlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbUNsaWVudC8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjlhNTcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+Cis8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7R2xlbW1DbGllbnQmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tQ2xpZW50JmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztHbGVtbUNsaWVudC0wLjAuMS1TTkFQU0hPVC5qYXImYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InRhcmdldC9HbGVtbUNsaWVudC0wLjAuMS1TTkFQU0hPVC5qYXIiIGVsZW1lbnRzPSIwIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU4ODYwOTQ3MjI2NSIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbUNsaWVudC8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2VhZTIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1DbGllbnQvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxIEBACisxNTg4NjA5NDcyMjY1CURlbGV0ZSBlbGVtZW50CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzExLzQ3L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY0NTFkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgcGFja2FnZSAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcyZhcG9zOyB0byAmYXBvcztHbGVtbVNlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7R2xlbW1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gRGVzdGluYXRpb24gZWxlbWVudDogJmFwb3M7R2xlbW1TZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO0dsZW1tU2VydmljZXMvc3JjL21haW4vamF2YS9kZS5rb3JhcC5zZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBwYWNrYWdlIiBkZXN0aW5hdGlvbj0iL3NyY1wvbWFpblwvcmVzb3VyY2VzIiBlbGVtZW50MT0iL3NyY1wvbWFpblwvamF2YSZsdDtkZS5rb3JhcC5zZXJ2aWNlcyIgZmxhZ3M9IjU4OTgzMCIgZnJhZ21lbnRzPSIxIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVQYWNrYWdlcyIgc3RhbXA9IjE1NzQ0MTE1MzMwOTAiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMS80Ny9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2ZTczMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTEvNDcvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEgQEAKKzE1NzQ0MTE1MzMwOTAJTW92ZSBwYWNrYWdlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzEyLzQ5L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMi80OS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGQwYWVhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAxOS8xMi80OS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvczt3ZWIueG1sJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSJzcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIiBlbGVtZW50cz0iMCIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1NzU2MjgzOTU2MzIiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO3dlYi54bWwudjEmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InNyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwudjEiIGVsZW1lbnRzPSIwIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU3NTYyODM5OTQ0NiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzEyLzQ5L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMTkvMTIvNDkvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZTYwZTEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDE5LzEyLzQ5L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxLDIgQEAKKzE1NzU2MjgzOTU2MzIJRGVsZXRlIGVsZW1lbnQKKzE1NzU2MjgzOTk0NDYJRGVsZXRlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMjEvMTAvNDEvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDIxLzEwLzQxL3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDc0MjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlcy8yMDIxLzEwLzQxL3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO0dsZW1tU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO0dsZW1tU2VydmljZXMucHJvcGVydGllcyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0icmVzb3VyY2VzL0dsZW1tU2VydmljZXMucHJvcGVydGllcyIgZWxlbWVudHM9IjAiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNjM0MjI2NjA4OTg0IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztHbGVtbVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztyZXNvdXJjZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9InJlc291cmNlcyIgZWxlbWVudHM9IjAiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjEiIHN0YW1wPSIxNjM0MjI2NjE1NDc5IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMjEvMTAvNDEvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMvMjAyMS8xMC80MS9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyMzY2OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzLzIwMjEvMTAvNDEvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsMiBAQAorMTYzNDIyNjYwODk4NAlEZWxldGUgZWxlbWVudAorMTYzNDIyNjYxNTQ3OQlEZWxldGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyOTg3YQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iTW92ZSBlbGVtZW50ICZhcG9zO1dvcmRmb3JtU2VydmljZXMuamF2YSZhcG9zOyB0byAmYXBvczt3Zm9ybVNlcnZpY2VzL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO3dmb3JtU2VydmljZXMvc3JjJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5Xb3JkZm9ybVNlcnZpY2VzLmphdmEmYXBvczsmI3gwRDsmI3gwQTstIFVwZGF0ZSByZWZlcmVuY2VzIHRvIHJlZmFjdG9yZWQgZWxlbWVudCIgZGVzY3JpcHRpb249Ik1vdmUgY29tcGlsYXRpb24gdW5pdCIgZGVzdGluYXRpb249Ij13Zm9ybVNlcnZpY2VzL3NyYyIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7V29yZGZvcm1TZXJ2aWNlcy5qYXZhIiBmaWxlcz0iMCIgZmxhZ3M9IjU4OTgzMCIgZm9sZGVycz0iMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlIiBwb2xpY3k9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlUmVzb3VyY2VzIiBxdWFsaWZpZWQ9ImZhbHNlIiByZWZlcmVuY2VzPSJ0cnVlIiBzdGFtcD0iMTU4NzYzNjgyNzQxNiIgdW5pdHM9IjEiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJNb3ZlIGVsZW1lbnQgJmFwb3M7R2xlbW1VdGlscy5qYXZhJmFwb3M7IHRvICZhcG9zO1V0aWxzL3NyYy9kZS5rb3JhcC5zZXJ2aWNlcy51dGlscyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO1V0aWxzL3NyYy9kZS5rb3JhcC5zZXJ2aWNlcy51dGlscyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuR2xlbW1VdGlscy5qYXZhJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIGNvbXBpbGF0aW9uIHVuaXQiIGRlc3RpbmF0aW9uPSI9VXRpbHMvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2VzLnV0aWxzIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tHbGVtbVV0aWxzLmphdmEiIGZpbGVzPSIwIiBmbGFncz0iNTg5ODMwIiBmb2xkZXJzPSIwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIHBhdHRlcm5zPSIqIiBwb2xpY3k9Im9yZy5lY2xpcHNlLmpkdC51aS5tb3ZlUmVzb3VyY2VzIiBxdWFsaWZpZWQ9ImZhbHNlIiByZWZlcmVuY2VzPSJ0cnVlIiBzdGFtcD0iMTU4NzczNDE3NjM2NyIgdW5pdHM9IjEiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3OTM4MQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsMiBAQAorMTU4NzYzNjgyNzQxNglNb3ZlIGNvbXBpbGF0aW9uIHVuaXQKKzE1ODc3MzQxNzYzNjcJTW92ZSBjb21waWxhdGlvbiB1bml0CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWVhNjViCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL0dsZW1tU2VydmljZXMyLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgZWxlbWVudCAmYXBvcztMZW1tYVJlc3BvbnNlLmphdmEmYXBvczsgdG8gJmFwb3M7SnNvblRyYXZlcnNlL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7R2xlbW1TZXJ2aWNlczImYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO0pzb25UcmF2ZXJzZS9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLkxlbW1hUmVzcG9uc2UuamF2YSZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50IiBkZXNjcmlwdGlvbj0iTW92ZSBjb21waWxhdGlvbiB1bml0IiBkZXN0aW5hdGlvbj0iPUpzb25UcmF2ZXJzZS9zcmMiIGVsZW1lbnQxPSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2Vze0xlbW1hUmVzcG9uc2UuamF2YSIgZmlsZXM9IjAiIGZsYWdzPSI1ODk4MzAiIGZvbGRlcnM9IjAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZSIgcG9saWN5PSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZVJlc291cmNlcyIgcXVhbGlmaWVkPSJmYWxzZSIgcmVmZXJlbmNlcz0idHJ1ZSIgc3RhbXA9IjE1OTIzMTM1MjYxMzgiIHVuaXRzPSIxIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9HbGVtbVNlcnZpY2VzMi8yMDIwLzYvMjUvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNDVkZTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvR2xlbW1TZXJ2aWNlczIvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxIEBACisxNTkyMzEzNTI2MTM4CU1vdmUgY29tcGlsYXRpb24gdW5pdApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmYjc2OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9HbGVtQ2xpZW50Q2xhc3NlcyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL0dsZW1DbGllbnRDbGFzc2VzIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODc0ODcyMjE0NTciIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvR2xlbUNsaWVudFNyYyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL0dsZW1DbGllbnRTcmMiIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4NzU1MTU3NTM2MiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztzZXJ2aWNlcyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0ic2VydmljZXMiIGVsZW1lbnRzPSIwIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU4NzU3MTc2MDY4MCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iTW92ZSBwYWNrYWdlICZhcG9zO2RlLmtvcmFwLmpzb24mYXBvczsgdG8gJmFwb3M7SnNvblRyYXZlcnNlL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO0pzb25UcmF2ZXJzZS9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL3NyYy9kZS5rb3JhcC5qc29uJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIHBhY2thZ2UiIGRlc3RpbmF0aW9uPSI9SnNvblRyYXZlcnNlL3NyYyIgZWxlbWVudDE9Ii9zcmMmbHQ7ZGUua29yYXAuanNvbiIgZmxhZ3M9IjU4OTgzMCIgZnJhZ21lbnRzPSIxIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVQYWNrYWdlcyIgc3RhbXA9IjE1ODc1Nzc1NDY0MjMiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0MzM5OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsNCBAQAorMTU4NzQ4NzIyMTQ1NwlEZWxldGUgZWxlbWVudAorMTU4NzU1MTU3NTM2MglEZWxldGUgZWxlbWVudAorMTU4NzU3MTc2MDY4MAlEZWxldGUgZWxlbWVudAorMTU4NzU3NzU0NjQyMwlNb3ZlIHBhY2thZ2UKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzQvMTgvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE4L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNDcyZTEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE4L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+Cis8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9HbGVtbUNsaWVudFNyYyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL0dsZW1tQ2xpZW50U3JjIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODgxODQxMTAzMDgiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xOC9yZWZhY3RvcmluZ3MuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC80LzE4L3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDg1MzgzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNC8xOC9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU4ODE4NDExMDMwOAlEZWxldGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmhpc3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwMjM4ZgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9zcmMvZGUua29yYXAuanNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5qc29uIiBlbGVtZW50Mj0iL3NyYyZsdDtkZS5rb3JhcCIgZWxlbWVudDM9Ii9zcmMmbHQ7ZGUiIGVsZW1lbnRzPSIzIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY2MTM4MzM5NCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9qc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvanNvbiIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjYxNzQ0NDA3IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL2pzb24mYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9qc29uIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NjE4MjEzOTUiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvanNvbi9rb3JhcC5qc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvanNvbiZsdDtrb3JhcC5qc29uIiBlbGVtZW50Mj0iL2pzb24mbHQ7a29yYXAiIGVsZW1lbnRzPSIyIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY2Mjc0MTY2OSIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9qc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvanNvbiIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjYyODM1MzI0IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL0pzb24mYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9Kc29uIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NjMzODA2NjgiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvc3JjSnNvbiZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL3NyY0pzb24iIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY2MzY0NTE5NiIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztUZXN0cy9zcmNKc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjSnNvbiIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjYzNzQyNDA2IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL2NsYXNzZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9jbGFzc2VzIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODg2NzI1MzAyMTciIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7VGVzdHMvc3JjLUdsZW1tU2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMtR2xlbW1TZXJ2aWNlcyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4NjczMTM0MjI1IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvcztUZXN0cyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO1Rlc3RzL3NyYy1qc29uJmFwb3M7IiBkZXNjcmlwdGlvbj0iRGVsZXRlIGVsZW1lbnQiIGVsZW1lbnQxPSIvc3JjLWpzb24iIGVsZW1lbnRzPSIxIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIwIiBzdGFtcD0iMTU4ODY3MzE2MjAxNCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztXb3JkZm9ybVNlcnZpY2VzLmphdmEmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMmbHQ7e1dvcmRmb3JtU2VydmljZXMuamF2YSIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg4ODM2ODM4NDk2IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1Rlc3RzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjMDQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsMTIgQEAKKzE1ODg2NjEzODMzOTQJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjE3NDQ0MDcJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjE4MjEzOTUJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjI3NDE2NjkJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjI4MzUzMjQJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjMzODA2NjgJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjM2NDUxOTYJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NjM3NDI0MDYJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NzI1MzAyMTcJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NzMxMzQyMjUJRGVsZXRlIGVsZW1lbnQKKzE1ODg2NzMxNjIwMTQJRGVsZXRlIGVsZW1lbnQKKzE1ODg4MzY4Mzg0OTYJRGVsZXRlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMjAvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmI5NjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+Cis8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7VGVzdHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1Rlc3RzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztzcmMtd2Zvcm1TZXJ2aWNlcyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0ic3JjLXdmb3JtU2VydmljZXMiIGVsZW1lbnRzPSIwIiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmRlbGV0ZSIgcmVzb3VyY2VzPSIxIiBzdGFtcD0iMTU4OTMwMzIwMjg4MCIgc3ViUGFja2FnZXM9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9UZXN0cy8yMDIwLzUvMjAvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzIxNjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVGVzdHMvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxIEBACisxNTg5MzAzMjAyODgwCURlbGV0ZSBlbGVtZW50CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVXRpbHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1V0aWxzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzM3ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL1V0aWxzLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaGlzdG9yeQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2Vzc2lvbiB2ZXJzaW9uPSIxLjAiPgorPHJlZmFjdG9yaW5nIGNvbW1lbnQ9IlJlbmFtZSB0eXBlICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLkdsZW1tVXRpbHMmYXBvczsgdG8gJmFwb3M7VXRpbHMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO1V0aWxzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy51dGlscy5HbGVtbVV0aWxzJmFwb3M7JiN4MEQ7JiN4MEE7LSBSZW5hbWVkIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLnV0aWxzLlV0aWxzJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQmI3gwRDsmI3gwQTstIFVwZGF0ZSB0ZXh0dWFsIG9jY3VycmVuY2VzIGluIGNvbW1lbnRzIGFuZCBzdHJpbmdzIiBkZXNjcmlwdGlvbj0iUmVuYW1lIHR5cGUgJmFwb3M7R2xlbW1VdGlscyZhcG9zOyIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5yZW5hbWUudHlwZSIgaW5wdXQ9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXMudXRpbHN7R2xlbW1VdGlscy5qYXZhW0dsZW1tVXRpbHMiIG1hdGNoU3RyYXRlZ3k9IjEiIG5hbWU9IlV0aWxzIiBxdWFsaWZpZWQ9ImZhbHNlIiByZWZlcmVuY2VzPSJ0cnVlIiBzaW1pbGFyRGVjbGFyYXRpb25zPSJmYWxzZSIgc3RhbXA9IjE1ODc3MzgwNzY2MzAiIHRleHR1YWw9ImZhbHNlIiB2ZXJzaW9uPSIxLjAiLz4KKzwvc2Vzc2lvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVXRpbHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy9VdGlscy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2Q5YjYKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3MvVXRpbHMvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleApAQCAtMCwwICsxIEBACisxNTg3NzM4MDc2NjMwCVJlbmFtZSB0eXBlICdHbGVtbVV0aWxzJwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZUphci8yMDIwLzUvMjAvcmVmYWN0b3JpbmdzLmhpc3RvcnkgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlSmFyLzIwMjAvNS8yMC9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjNlNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZUphci8yMDIwLzUvMjAvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgYWNjZXNzb3JzPSJ0cnVlIiBjb21tZW50PSJEZWxldGUgZWxlbWVudCBmcm9tIHByb2plY3QgJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VKYXImYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO3dmb3JtU2VydmljZUphci9zZXJ2aWNlcyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL3NlcnZpY2VzIiBlbGVtZW50cz0iMSIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMCIgc3RhbXA9IjE1ODkyODA3MDQwODUiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO3dmb3JtU2VydmljZUphciZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvczt3Zm9ybVNlcnZpY2VKYXIvc2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zZXJ2aWNlcyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg5MjgwNzQ4MjI2IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvczt3Zm9ybVNlcnZpY2VKYXImYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZUphciZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7d2Zvcm1TZXJ2aWNlSmFyL3NyYyZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0iL3NyYyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTg5NTY1MDg1MDYzIiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPgorPC9zZXNzaW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VKYXIvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VKYXIvMjAyMC81LzIwL3JlZmFjdG9yaW5ncy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTdkZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZUphci8yMDIwLzUvMjAvcmVmYWN0b3JpbmdzLmluZGV4CkBAIC0wLDAgKzEsMyBAQAorMTU4OTI4MDcwNDA4NQlEZWxldGUgZWxlbWVudAorMTU4OTI4MDc0ODIyNglEZWxldGUgZWxlbWVudAorMTU4OTU2NTA4NTA2MwlEZWxldGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMtd3JvbmcvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMtd3JvbmcvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODE5OWQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy13cm9uZy8yMDIwLzQvMTcvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iTW92ZSBlbGVtZW50ICZhcG9zOyZhcG9zOyB0byAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy53Zm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLndmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV29yZGZvcm1TZXJ2aWNlcy50cmF2ZXJzZV9hbmRfcmV3cml0ZV9Lb3JhbFF1ZXJ5KC4uLikmYXBvczsmI3gwRDsmI3gwQTstIFRleHR1YWwgbW92ZSBvbmx5JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIG1ldGhvZCIgZGVzdGluYXRpb249Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7d2Zvcm1SZXdyaXRlLmphdmFbd2Zvcm1SZXdyaXRlIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tXb3JkZm9ybVNlcnZpY2VzLmphdmFbV29yZGZvcm1TZXJ2aWNlc350cmF2ZXJzZV9hbmRfcmV3cml0ZV9Lb3JhbFF1ZXJ5flFTdHJpbmc7IiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmUiIG1lbWJlcnM9IjEiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLm1vdmVNZW1iZXJzIiBzdGFtcD0iMTU4NzcxNTc2Mjk5OSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgZWxlbWVudCAmYXBvczsmYXBvczsgdG8gJmFwb3M7ZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBEZXN0aW5hdGlvbiBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy53Zm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLldvcmRmb3JtU2VydmljZXMudHJhdmVyc2VfYW5kX3Jld3JpdGVfS29yYWxRdWVyeV8yKC4uLikmYXBvczsmI3gwRDsmI3gwQTstIFRleHR1YWwgbW92ZSBvbmx5JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIG1ldGhvZCIgZGVzdGluYXRpb249Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7d2Zvcm1SZXdyaXRlLmphdmFbd2Zvcm1SZXdyaXRlIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tXb3JkZm9ybVNlcnZpY2VzLmphdmFbV29yZGZvcm1TZXJ2aWNlc350cmF2ZXJzZV9hbmRfcmV3cml0ZV9Lb3JhbFF1ZXJ5XzJ+UVN0cmluZzsiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZSIgbWVtYmVycz0iMSIgcG9saWN5PSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZU1lbWJlcnMiIHN0YW1wPSIxNTg3NzE1NzY4MDk5IiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iTW92ZSBlbGVtZW50ICZhcG9zOyZhcG9zOyB0byAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy53Zm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLndmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV29yZGZvcm1TZXJ2aWNlcy50cmF2ZXJzZUpzb25UcmVlKC4uLikmYXBvczsmI3gwRDsmI3gwQTstIFRleHR1YWwgbW92ZSBvbmx5JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQiIGRlc2NyaXB0aW9uPSJNb3ZlIG1ldGhvZCIgZGVzdGluYXRpb249Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7d2Zvcm1SZXdyaXRlLmphdmFbd2Zvcm1SZXdyaXRlIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tXb3JkZm9ybVNlcnZpY2VzLmphdmFbV29yZGZvcm1TZXJ2aWNlc350cmF2ZXJzZUpzb25UcmVlflFKc29uTm9kZTsiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZSIgbWVtYmVycz0iMSIgcG9saWN5PSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZU1lbWJlcnMiIHN0YW1wPSIxNTg3NzE1NzcyNzExIiB2ZXJzaW9uPSIxLjAiLz4mI3gwQTs8cmVmYWN0b3JpbmcgY29tbWVudD0iUmVuYW1lIHR5cGUgJmFwb3M7ZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlJmFwb3M7IHRvICZhcG9zO1dmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMud2Zvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBSZW5hbWVkIGVsZW1lbnQ6ICZhcG9zO2RlLmtvcmFwLnNlcnZpY2VzLldmb3JtUmV3cml0ZSZhcG9zOyYjeDBEOyYjeDBBOy0gVXBkYXRlIHJlZmVyZW5jZXMgdG8gcmVmYWN0b3JlZCBlbGVtZW50JiN4MEQ7JiN4MEE7LSBVcGRhdGUgdGV4dHVhbCBvY2N1cnJlbmNlcyBpbiBjb21tZW50cyBhbmQgc3RyaW5ncyIgZGVzY3JpcHRpb249IlJlbmFtZSB0eXBlICZhcG9zO3dmb3JtUmV3cml0ZSZhcG9zOyIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5yZW5hbWUudHlwZSIgaW5wdXQ9Ii9zcmMmbHQ7ZGUua29yYXAuc2VydmljZXN7d2Zvcm1SZXdyaXRlLmphdmFbd2Zvcm1SZXdyaXRlIiBtYXRjaFN0cmF0ZWd5PSIxIiBuYW1lPSJXZm9ybVJld3JpdGUiIHF1YWxpZmllZD0iZmFsc2UiIHJlZmVyZW5jZXM9InRydWUiIHNpbWlsYXJEZWNsYXJhdGlvbnM9ImZhbHNlIiBzdGFtcD0iMTU4NzcxNjY2Nzc0MCIgdGV4dHVhbD0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBjb21tZW50PSJSZW5hbWUgdHlwZSAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5XZm9ybVJld3JpdGUmYXBvczsgdG8gJmFwb3M7V29yZGZvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5XZm9ybVJld3JpdGUmYXBvczsmI3gwRDsmI3gwQTstIFJlbmFtZWQgZWxlbWVudDogJmFwb3M7ZGUua29yYXAuc2VydmljZXMuV29yZGZvcm1SZXdyaXRlJmFwb3M7JiN4MEQ7JiN4MEE7LSBVcGRhdGUgcmVmZXJlbmNlcyB0byByZWZhY3RvcmVkIGVsZW1lbnQmI3gwRDsmI3gwQTstIFVwZGF0ZSB0ZXh0dWFsIG9jY3VycmVuY2VzIGluIGNvbW1lbnRzIGFuZCBzdHJpbmdzIiBkZXNjcmlwdGlvbj0iUmVuYW1lIHR5cGUgJmFwb3M7V2Zvcm1SZXdyaXRlJmFwb3M7IiBmbGFncz0iNTg5ODMwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLnJlbmFtZS50eXBlIiBpbnB1dD0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tXZm9ybVJld3JpdGUuamF2YVtXZm9ybVJld3JpdGUiIG1hdGNoU3RyYXRlZ3k9IjEiIG5hbWU9IldvcmRmb3JtUmV3cml0ZSIgcXVhbGlmaWVkPSJmYWxzZSIgcmVmZXJlbmNlcz0idHJ1ZSIgc2ltaWxhckRlY2xhcmF0aW9ucz0iZmFsc2UiIHN0YW1wPSIxNTg3NzM4OTA5MzA0IiB0ZXh0dWFsPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+JiN4MEE7PHJlZmFjdG9yaW5nIGNvbW1lbnQ9Ik1vdmUgcGFja2FnZSAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcyZhcG9zOyB0byAmYXBvczt3Zm9ybVNlcnZpY2VzMi9zcmMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIERlc3RpbmF0aW9uIGVsZW1lbnQ6ICZhcG9zO3dmb3JtU2VydmljZXMyL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgZWxlbWVudDogJmFwb3M7d2Zvcm1TZXJ2aWNlcy9zcmMvZGUua29yYXAuc2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIFVwZGF0ZSByZWZlcmVuY2VzIHRvIHJlZmFjdG9yZWQgZWxlbWVudCIgZGVzY3JpcHRpb249Ik1vdmUgcGFja2FnZSIgZGVzdGluYXRpb249Ij13Zm9ybVNlcnZpY2VzMi9zcmMiIGVsZW1lbnQxPSIvc3JjJmx0O2RlLmtvcmFwLnNlcnZpY2VzIiBmbGFncz0iNTg5ODMwIiBmcmFnbWVudHM9IjEiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZSIgcG9saWN5PSJvcmcuZWNsaXBzZS5qZHQudWkubW92ZVBhY2thZ2VzIiBzdGFtcD0iMTU4Nzc0MTAwODQwMCIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMtd3JvbmcvMjAyMC80LzE3L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLXdyb25nLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1ZTIxYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLXdyb25nLzIwMjAvNC8xNy9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSw2IEBACisxNTg3NzE1NzYyOTk5CU1vdmUgbWV0aG9kCisxNTg3NzE1NzY4MDk5CU1vdmUgbWV0aG9kCisxNTg3NzE1NzcyNzExCU1vdmUgbWV0aG9kCisxNTg3NzE2NjY3NzQwCVJlbmFtZSB0eXBlICd3Zm9ybVJld3JpdGUnCisxNTg3NzM4OTA5MzA0CVJlbmFtZSB0eXBlICdXZm9ybVJld3JpdGUnCisxNTg3NzQxMDA4NDAwCU1vdmUgcGFja2FnZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5oaXN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTg2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLy5yZWZhY3RvcmluZ3Mvd2Zvcm1TZXJ2aWNlcy8yMDIwLzUvMTkvcmVmYWN0b3JpbmdzLmhpc3RvcnkKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlc3Npb24gdmVyc2lvbj0iMS4wIj4KKzxyZWZhY3RvcmluZyBjb21tZW50PSJDb3B5IGVsZW1lbnQgJmFwb3M7V29yZGZvcm1TZXJ2aWNlcy5qYXZhJmFwb3M7IHRvICZhcG9zO1Rlc3RzL3NyYyZhcG9zOyYjeDBEOyYjeDBBOy0gT3JpZ2luYWwgcHJvamVjdDogJmFwb3M7d2Zvcm1TZXJ2aWNlcyZhcG9zOyYjeDBEOyYjeDBBOy0gRGVzdGluYXRpb24gZWxlbWVudDogJmFwb3M7VGVzdHMvc3JjJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvcztkZS5rb3JhcC5zZXJ2aWNlcy5Xb3JkZm9ybVNlcnZpY2VzLmphdmEmYXBvczsiIGRlc2NyaXB0aW9uPSJDb3B5IGNvbXBpbGF0aW9uIHVuaXQiIGRlc3RpbmF0aW9uPSI9VGVzdHMvc3JjIiBlbGVtZW50MT0iL3NyYyZsdDtkZS5rb3JhcC5zZXJ2aWNlc3tXb3JkZm9ybVNlcnZpY2VzLmphdmEiIGZpbGVzPSIwIiBmbGFncz0iNTg5ODMwIiBmb2xkZXJzPSIwIiBpZD0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcHkiIHBvbGljeT0ib3JnLmVjbGlwc2UuamR0LnVpLmNvcHlSZXNvdXJjZXMiIHN0YW1wPSIxNTg4ODM2Nzk4MjU5IiB1bml0cz0iMSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMvMjAyMC81LzE5L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhNDZmNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNS8xOS9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSBAQAorMTU4ODgzNjc5ODI1OQlDb3B5IGNvbXBpbGF0aW9uIHVuaXQKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeSBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaGlzdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmUyYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5oaXN0b3J5CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXNzaW9uIHZlcnNpb249IjEuMCI+JiN4MEE7PHJlZmFjdG9yaW5nIGFjY2Vzc29ycz0idHJ1ZSIgY29tbWVudD0iRGVsZXRlIGVsZW1lbnQgZnJvbSBwcm9qZWN0ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIHByb2plY3Q6ICZhcG9zO3dmb3JtU2VydmljZXMmYXBvczsmI3gwRDsmI3gwQTstIE9yaWdpbmFsIGVsZW1lbnQ6ICZhcG9zO3dmb3JtU2VydmljZXMvc3JjLUdsZW1tU2VydmljZXMmYXBvczsiIGRlc2NyaXB0aW9uPSJEZWxldGUgZWxlbWVudCIgZWxlbWVudDE9Ii9zcmMtR2xlbW1TZXJ2aWNlcyIgZWxlbWVudHM9IjEiIGZsYWdzPSI1ODk4MzAiIGlkPSJvcmcuZWNsaXBzZS5qZHQudWkuZGVsZXRlIiByZXNvdXJjZXM9IjAiIHN0YW1wPSIxNTkyMjk4MzEyMzM4IiBzdWJQYWNrYWdlcz0iZmFsc2UiIHZlcnNpb249IjEuMCIvPiYjeDBBOzxyZWZhY3RvcmluZyBhY2Nlc3NvcnM9InRydWUiIGNvbW1lbnQ9IkRlbGV0ZSBlbGVtZW50IGZyb20gcHJvamVjdCAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBwcm9qZWN0OiAmYXBvczt3Zm9ybVNlcnZpY2VzJmFwb3M7JiN4MEQ7JiN4MEE7LSBPcmlnaW5hbCBlbGVtZW50OiAmYXBvczt3Zm9ybVNlcnZpY2VzLTAuMS1TTkFQU0hPVCZhcG9zOyIgZGVzY3JpcHRpb249IkRlbGV0ZSBlbGVtZW50IiBlbGVtZW50MT0idGFyZ2V0L3dmb3JtU2VydmljZXMtMC4xLVNOQVBTSE9UIiBlbGVtZW50cz0iMCIgZmxhZ3M9IjU4OTgzMCIgaWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5kZWxldGUiIHJlc291cmNlcz0iMSIgc3RhbXA9IjE1OTIzMTMzNzc3ODQiIHN1YlBhY2thZ2VzPSJmYWxzZSIgdmVyc2lvbj0iMS4wIi8+Cis8L3Nlc3Npb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy8ucmVmYWN0b3JpbmdzL3dmb3JtU2VydmljZXMvMjAyMC82LzI1L3JlZmFjdG9yaW5ncy5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0NjhjNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcvLnJlZmFjdG9yaW5ncy93Zm9ybVNlcnZpY2VzLzIwMjAvNi8yNS9yZWZhY3RvcmluZ3MuaW5kZXgKQEAgLTAsMCArMSwyIEBACisxNTkyMjk4MzEyMzM4CURlbGV0ZSBlbGVtZW50CisxNTkyMzEzMzc3Nzg0CURlbGV0ZSBlbGVtZW50CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZy9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFlODY4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8c2VjdGlvbiBuYW1lPSJSZWZhY3RvcmluZ1dpemFyZC5wcmV2aWV3Ij4KKwkJPGl0ZW0gdmFsdWU9IjYwMCIga2V5PSJ3aWR0aCIvPgorCQk8aXRlbSB2YWx1ZT0iNDAwIiBrZXk9ImhlaWdodCIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3Jpbmcuc2V0dGluZ3MiPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iZGVsZXRlU3ViUGFja2FnZXMiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9Im1vdmVXaXphcmQudXBkYXRlUXVhbGlmaWVkTmFtZXMiLz4KKwkJPGl0ZW0gdmFsdWU9IioiIGtleT0icGF0dGVybnMiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iSW5mZXJUeXBlQXJndW1lbnRzIj4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0ibGVhdmVVbmNvbnN0cmFpbmVkUmF3Ii8+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9ImFzc3VtZUNsb25lUmV0dXJuc1NhbWVUeXBlIi8+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS51aS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzMyZmMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwxNjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnBvbS5kZXBlbmRlbmNpZXMiPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJNYXZlblByb2plY3RXaXphcmRBcmNoZXR5cGVQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9IkFsbCBDYXRhbG9ncyIga2V5PSJjYXRhbG9nIi8+CisJCTxsaXN0IGtleT0icHJvamVjdE5hbWVUZW1wbGF0ZSI+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVRSVU5LIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdLVt2ZXJzaW9uXSIvPgorCQkJPGl0ZW0gdmFsdWU9IltuYW1lXSIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IndpemFyZFBhZ2UiPgorCQk8bGlzdCBrZXk9Imdyb3VwSWQiPgorCQkJPGl0ZW0gdmFsdWU9ImRlLmtvcmFwLnNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iVXRpbHMiLz4KKwkJCTxpdGVtIHZhbHVlPSJ3Zm9ybVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iSnNvblRyYXZlcnNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW1DbGllbnQiLz4KKwkJCTxpdGVtIHZhbHVlPSJHbGVtbVNlcnZpY2VzMiIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0ibmFtZSI+CisJCQk8aXRlbSB2YWx1ZT0iV2Zvcm1TZXJ2aWNlcy1KYXIiLz4KKwkJCTxpdGVtIHZhbHVlPSJ3Zm9ybVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iVXRpbHMiLz4KKwkJCTxpdGVtIHZhbHVlPSJKc29uVHJhdmVyc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSJHbGVtbSBDbGllbnQgbGlicmFyeSIvPgorCQkJPGl0ZW0gdmFsdWU9IkdsZW1tU2VydmljZXMiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9ImFydGlmYWN0SWQiPgorCQkJPGl0ZW0gdmFsdWU9Indmb3JtU2VydmljZUphciIvPgorCQkJPGl0ZW0gdmFsdWU9Indmb3JtU2VydmljZXMiLz4KKwkJCTxpdGVtIHZhbHVlPSJVdGlscyIvPgorCQkJPGl0ZW0gdmFsdWU9Ikpzb25UcmF2ZXJzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IkdsZW1tQ2xpZW50Ii8+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW1TZXJ2aWNlczIiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9InZlcnNpb24iPgorCQkJPGl0ZW0gdmFsdWU9IjAuMS1TTkFQU0hPVCIvPgorCQkJPGl0ZW0gdmFsdWU9IjAuMC4xLVNOQVBTSE9UIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTWF2ZW5Nb2R1bGVXaXphcmRQYXJlbnRQYWdlIj4KKwkJPGxpc3Qga2V5PSJtb2R1bGVOYW1lIj4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9InByb2plY3ROYW1lVGVtcGxhdGUiPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXS1UUlVOSyIvPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXS1bdmVyc2lvbl0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXS1bdmVyc2lvbl0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbbmFtZV0iLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkN1c3RvbUFyY2hldHlwZURpYWxvZyI+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Ik1hdmVuUHJvamVjdFdpemFyZEFydGlmYWN0UGFnZSI+CisJCTxsaXN0IGtleT0iZ3JvdXBJZCI+CisJCQk8aXRlbSB2YWx1ZT0iZGUua29yYXAuc2VydmljZXMiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9Im5hbWUiPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0iYXJ0aWZhY3RJZCI+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW1TZXJ2aWNlczIiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9InByb2plY3ROYW1lVGVtcGxhdGUiPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXS1UUlVOSyIvPgorCQkJPGl0ZW0gdmFsdWU9IlthcnRpZmFjdElkXS1bdmVyc2lvbl0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbZ3JvdXBJZF0uW2FydGlmYWN0SWRdIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXS1bdmVyc2lvbl0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbbmFtZV0iLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9InZlcnNpb24iPgorCQkJPGl0ZW0gdmFsdWU9IjAuMC4xLVNOQVBTSE9UIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUucG9tLm92ZXJ2aWV3Ij4KKwkJPGxpc3Qga2V5PSJjaU1hbmFnZW1lbnRVcmwiPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0iY2lNYW5hZ2VtZW50U3lzdGVtIj4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9Imlzc3VlTWFuYWdlbWVudFN5c3RlbSI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJpc3N1ZU1hbmFnZW1lbnRVcmwiPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLmRpYWxvZ3MuRWRpdERlcGVuZGVuY3lEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0iNDgwIiBrZXk9IndpZHRoIi8+CisJCTxpdGVtIHZhbHVlPSI3MjAiIGtleT0ieCIvPgorCQk8aXRlbSB2YWx1ZT0iMjIwIiBrZXk9InkiLz4KKwkJPGl0ZW0gdmFsdWU9IjQ1MCIga2V5PSJoZWlnaHQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwuZGlhbG9ncy5NYXZlblJlcG9zaXRvcnlTZWFyY2hEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0iNDgwIiBrZXk9IndpZHRoIi8+CisJCTxpdGVtIHZhbHVlPSI3MDciIGtleT0ieCIvPgorCQk8aXRlbSB2YWx1ZT0iMTY3IiBrZXk9InkiLz4KKwkJPGl0ZW0gdmFsdWU9IjUzMSIga2V5PSJoZWlnaHQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTWF2ZW5Qcm9qZWN0SW1wb3J0V2l6YXJkUGFnZSI+CisJCTxsaXN0IGtleT0icm9vdERpcmVjdG9yeSI+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMiLz4KKwkJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyIi8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzIi8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHMiLz4KKwkJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMiLz4KKwkJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQiLz4KKwkJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudCIvPgorCQkJPGl0ZW0gdmFsdWU9IkY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdMRU1NLVNlcnZpY2VzIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJwcm9qZWN0TmFtZVRlbXBsYXRlIj4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tVFJVTksiLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW25hbWVdIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTWF2ZW5Qcm9qZWN0V2l6YXJkTG9jYXRpb25QYWdlIj4KKwkJPGxpc3Qga2V5PSJsb2NhdGlvbiI+CisJCQk8aXRlbSB2YWx1ZT0iRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdMRU1NLVNlcnZpY2VzIi8+CisJCQk8aXRlbSB2YWx1ZT0iRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdMRU1NLVNlcnZpY2VzXHNyY1xndWVzdFxHdWVzdC5qYXZhIi8+CisJCQk8aXRlbSB2YWx1ZT0iRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJwcm9qZWN0TmFtZVRlbXBsYXRlIj4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tVFJVTksiLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW25hbWVdIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTWF2ZW4yUHJvamVjdFdpemFyZEFyY2hpZmFjdFBhZ2UiPgorCQk8bGlzdCBrZXk9InBhY2thZ2UiPgorCQkJPGl0ZW0gdmFsdWU9ImRlLmtvcmFwLnNlcnZpY2VzIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJncm91cElkIj4KKwkJCTxpdGVtIHZhbHVlPSJkZS5rb3JhcC5zZXJ2aWNlcyIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0iYXJ0aWZhY3RJZCI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJwcm9qZWN0TmFtZVRlbXBsYXRlIj4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0iLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tVFJVTksiLz4KKwkJCTxpdGVtIHZhbHVlPSJbYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW2dyb3VwSWRdLlthcnRpZmFjdElkXSIvPgorCQkJPGl0ZW0gdmFsdWU9Iltncm91cElkXS5bYXJ0aWZhY3RJZF0tW3ZlcnNpb25dIi8+CisJCQk8aXRlbSB2YWx1ZT0iW25hbWVdIi8+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJ2ZXJzaW9uIj4KKwkJCTxpdGVtIHZhbHVlPSIwLjAuMS1TTkFQU0hPVCIvPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLm0yZS5lZGl0b3IuZGlhbG9ncy5NYW5hZ2VEZXBlbmRlbmNpZXNEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0iNzAzIiBrZXk9IndpZHRoIi8+CisJCTxpdGVtIHZhbHVlPSI3MzYiIGtleT0ieCIvPgorCQk8aXRlbSB2YWx1ZT0iMzM3IiBrZXk9InkiLz4KKwkJPGl0ZW0gdmFsdWU9IjQ1MCIga2V5PSJoZWlnaHQiLz4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tQ2xpZW50LmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tQ2xpZW50LmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvR2xlbW1DbGllbnQubGlmZWN5Y2xlbWFwcGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tU2VydmljZXMubGlmZWN5Y2xlbWFwcGluZyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvR2xlbW1TZXJ2aWNlcy5saWZlY3ljbGVtYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmJlOTgKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tU2VydmljZXMubGlmZWN5Y2xlbWFwcGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tU2VydmljZXMyLmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0dsZW1tU2VydmljZXMyLmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmYmU5OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvR2xlbW1TZXJ2aWNlczIubGlmZWN5Y2xlbWFwcGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL0pzb25UcmF2ZXJzZS5saWZlY3ljbGVtYXBwaW5nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9Kc29uVHJhdmVyc2UubGlmZWN5Y2xlbWFwcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGM3NzljCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9Kc29uVHJhdmVyc2UubGlmZWN5Y2xlbWFwcGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL1Rlc3RzLmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL1Rlc3RzLmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvVGVzdHMubGlmZWN5Y2xlbWFwcGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL1V0aWxzLmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL1V0aWxzLmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvVXRpbHMubGlmZWN5Y2xlbWFwcGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zdy5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zdy5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiZTUxOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN3LmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zd18xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN3XzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTA4NTcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zd18xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeC5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeC5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyZTNmMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN4LmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeF8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN4XzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeF8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeS5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeS5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5ZmMxMwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN5LmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeV8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN5XzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zeV8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zei5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zei5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MGM0OAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN6LmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zel8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzN6XzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L18zel8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MC5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MC5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiMzk3NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzQwLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MF8xLmRlbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzQwXzEuZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDczYmQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MF8xLmRlbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MS5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L180MS5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhNGRkNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvXzQxLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3NlZ21lbnRzLmdlbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvc2VnbWVudHMuZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzZlMmEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3NlZ21lbnRzLmdlbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3NlZ21lbnRzXzNwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9zZWdtZW50c18zcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU4OTYyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wMDA4ODYwMDM0M2ZmMWQ2NTg4OTNiYzY5OWMwOWE3Ni9zZWdtZW50c18zcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3dyaXRlLmxvY2sgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzAwMDg4NjAwMzQzZmYxZDY1ODg5M2JjNjk5YzA5YTc2L3dyaXRlLmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDAwODg2MDAzNDNmZjFkNjU4ODkzYmM2OTljMDlhNzYvd3JpdGUubG9jawpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmkuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmkuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOGE1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL18yaS5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmlfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL18yaV8xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ3M2JkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmlfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmouY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmouY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODdjNzMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL18yai5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmpfMS5kZWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL18yal8xLmRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ3M2JkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmpfMS5kZWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmsuY2ZzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9fMmsuY2ZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDA0YzMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL18yay5jZnMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9zZWdtZW50cy5nZW4gYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL3NlZ21lbnRzLmdlbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE3ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9zZWdtZW50cy5nZW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy9zZWdtZW50c18yZCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvc2VnbWVudHNfMmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExOGFmYgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvMDViMGZlODUyNDg2MGJkNzNjYmIwN2VmMzBmYjM0Y2Mvc2VnbWVudHNfMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy93cml0ZS5sb2NrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy8wNWIwZmU4NTI0ODYwYmQ3M2NiYjA3ZWYzMGZiMzRjYy93cml0ZS5sb2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzA1YjBmZTg1MjQ4NjBiZDczY2JiMDdlZjMwZmIzNGNjL3dyaXRlLmxvY2sKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVhLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVhLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE2YWNjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWEuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVhXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWFfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1NjJjMAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVhXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzViLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzViLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNjNzhjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWIuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzViXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWJfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzViXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVjLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVjLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThjMGRmCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWMuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVjXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWNfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVjXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVkLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVkLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjJhMTRkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWQuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVkXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWRfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVkXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVlLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVlLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQ3MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWUuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVlXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWVfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVlXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVmLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVmLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWYwNTMxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWYuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVmXzEuZGVsIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWZfMS5kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NzNiZAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVmXzEuZGVsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVnLmNmcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvXzVnLmNmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTUxZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9fNWcuY2ZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvc2VnbWVudHMuZ2VuIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC9zZWdtZW50cy5nZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0N2EyMgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvc2VnbWVudHMuZ2VuCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvc2VnbWVudHNfNHogYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3NlZ21lbnRzXzR6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTYwOGQKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzLzgzMGJjMTE4MzMyZTc3MjkyOTQ5ZWQxZTZkMmZhYmUwL3NlZ21lbnRzXzR6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvd3JpdGUubG9jayBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvODMwYmMxMTgzMzJlNzcyOTI5NDllZDFlNmQyZmFiZTAvd3JpdGUubG9jawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy84MzBiYzExODMzMmU3NzI5Mjk0OWVkMWU2ZDJmYWJlMC93cml0ZS5sb2NrCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18xeS5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18xeS5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3NTk2NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvXzF5LmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18xei5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18xei5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczYTFjZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvXzF6LmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18yMC5jZnMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L18yMC5jZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjOTIxNQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvXzIwLmNmcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3NlZ21lbnRzLmdlbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvc2VnbWVudHMuZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNzM2MzkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3NlZ21lbnRzLmdlbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3NlZ21lbnRzXzF2IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9zZWdtZW50c18xdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJlMDExCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS9uZXh1cy9kMDI5MzI4OTc4MmM3YTRmNjc2ZmI2Mjg4ZjY4Y2M5Ny9zZWdtZW50c18xdgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3dyaXRlLmxvY2sgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL25leHVzL2QwMjkzMjg5NzgyYzdhNGY2NzZmYjYyODhmNjhjYzk3L3dyaXRlLmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvbmV4dXMvZDAyOTMyODk3ODJjN2E0ZjY3NmZiNjI4OGY2OGNjOTcvd3JpdGUubG9jawpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93Zm9ybVNlcnZpY2VKYXIubGlmZWN5Y2xlbWFwcGluZyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd2Zvcm1TZXJ2aWNlSmFyLmxpZmVjeWNsZW1hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmNvcmUvd2Zvcm1TZXJ2aWNlSmFyLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93Zm9ybVNlcnZpY2VzLmxpZmVjeWNsZW1hcHBpbmcgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL3dmb3JtU2VydmljZXMubGlmZWN5Y2xlbWFwcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTI0MzE5Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93Zm9ybVNlcnZpY2VzLmxpZmVjeWNsZW1hcHBpbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93b3Jrc3BhY2VTdGF0ZS5zZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL3dvcmtzcGFjZVN0YXRlLnNlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWFmZGVhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93b3Jrc3BhY2VTdGF0ZS5zZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93b3Jrc3BhY2VzdGF0ZS5wcm9wZXJ0aWVzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuY29yZS93b3Jrc3BhY2VzdGF0ZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmZmNGUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5jb3JlL3dvcmtzcGFjZXN0YXRlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMiBAQAorI1NhdCBPY3QgMjMgMTk6MzM6MzkgQ0VTVCAyMDIxCitkZS5rb3JhcC5zZXJ2aWNlc1w6dXRpbHNcOnBvbVw6XDowLjEtU05BUFNIT1Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFV0aWxzXFxwb20ueG1sCitkZS5rb3JhcC5zZXJ2aWNlc1w6d2Zvcm1TZXJ2aWNlSmFyXDpqYXJcOnRlc3RzXDowLjEtU05BUFNIT1Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFdmb3JtU2VydmljZUphclxcdGFyZ2V0XFx0ZXN0LWNsYXNzZXMKK2RlLmtvcmFwLmpzb25cOkpzb25UcmF2ZXJzZVw6amFyXDpcOjAuMS1TTkFQU0hPVD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcSnNvblRyYXZlcnNlXFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDp1dGlsc1w6amFyXDp0ZXN0c1w6MC4xLVNOQVBTSE9UPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxVdGlsc1xcdGFyZ2V0XFx0ZXN0LWNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDp1dGlsc1w6amFyXDpcOjAuMS1TTkFQU0hPVD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcVXRpbHNcXHRhcmdldFxcY2xhc3NlcworZGUua29yYXAuanNvblw6SnNvblRyYXZlcnNlXDpqYXJcOnRlc3RzXDowLjEtU05BUFNIT1Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEpzb25UcmF2ZXJzZVxcdGFyZ2V0XFx0ZXN0LWNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDpHbGVtbVNlcnZpY2VzXDp3YXJcOlw6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEdsZW1tU2VydmljZXNcXHRhcmdldFxcY2xhc3NlcworZGUua29yYXAuc2VydmljZXNcOkdsZW1tU2VydmljZXNcOmphclw6dGVzdHNcOjAuMi1UZXN0PUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxHbGVtbVNlcnZpY2VzXFx0YXJnZXRcXHRlc3QtY2xhc3NlcworZGUua29yYXAuc2VydmljZXNcOndmb3JtU2VydmljZUphclw6cG9tXDpcOjAuMS1TTkFQU0hPVD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcV2Zvcm1TZXJ2aWNlSmFyXFxwb20ueG1sCitkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnRcOkdsZW1tQ2xpZW50XDpwb21cOlw6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEdsZW1tQ2xpZW50XFxwb20ueG1sCitkZS5rb3JhcC5zZXJ2aWNlc1w6d2Zvcm1TZXJ2aWNlSmFyXDpqYXJcOlw6MC4xLVNOQVBTSE9UPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxXZm9ybVNlcnZpY2VKYXJcXHRhcmdldFxcY2xhc3NlcworZGUua29yYXAuc2VydmljZXNcOndmb3JtU2VydmljZXNcOnBvbVw6XDowLjItVGVzdD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcV2Zvcm1TZXJ2aWNlc1xccG9tLnhtbAorZGUua29yYXAuc2VydmljZXNcOnRlc3RzXDpwb21cOlw6MC4xPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxQcm9qZWN0LVRlc3RzXFxwb20ueG1sCitkZS5rb3JhcC5zZXJ2aWNlc1w6dGVzdHNcOmphclw6XDowLjE9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFByb2plY3QtVGVzdHNcXHRhcmdldFxcY2xhc3NlcworZGUua29yYXAuc2VydmljZXNcOnRlc3RzXDpqYXJcOnRlc3RzXDowLjE9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXFByb2plY3QtVGVzdHNcXHRhcmdldFxcdGVzdC1jbGFzc2VzCitkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnRcOkdsZW1tQ2xpZW50XDpqYXJcOnRlc3RzXDowLjItVGVzdD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcR2xlbW1DbGllbnRcXHRhcmdldFxcdGVzdC1jbGFzc2VzCitkZS5rb3JhcC5zZXJ2aWNlc1w6d2Zvcm1TZXJ2aWNlc1w6d2FyXDpcOjAuMi1UZXN0PUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxXZm9ybVNlcnZpY2VzXFx0YXJnZXRcXGNsYXNzZXMKK2RlLmtvcmFwLnNlcnZpY2VzXDpHbGVtbVNlcnZpY2VzXDpwb21cOlw6MC4yLVRlc3Q9Q1w6XFxteUlEU1xcRGF0ZW5cXEtvckFQXFxTZXJ2aWNlcy0wLjFcXEdsZW1tU2VydmljZXNcXHBvbS54bWwKK2RlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudFw6R2xlbW1DbGllbnRcOmphclw6XDowLjItVGVzdD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcR2xlbW1DbGllbnRcXHRhcmdldFxcY2xhc3NlcworZGUua29yYXAuanNvblw6SnNvblRyYXZlcnNlXDpwb21cOlw6MC4xLVNOQVBTSE9UPUNcOlxcbXlJRFNcXERhdGVuXFxLb3JBUFxcU2VydmljZXMtMC4xXFxKc29uVHJhdmVyc2VcXHBvbS54bWwKK2RlLmtvcmFwLnNlcnZpY2VzXDp3Zm9ybVNlcnZpY2VzXDpqYXJcOnRlc3RzXDowLjItVGVzdD1DXDpcXG15SURTXFxEYXRlblxcS29yQVBcXFNlcnZpY2VzLTAuMVxcV2Zvcm1TZXJ2aWNlc1xcdGFyZ2V0XFx0ZXN0LWNsYXNzZXMKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9HbGVtbUNsaWVudC5jb250YWluZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1DbGllbnQuY29udGFpbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTljZDkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1DbGllbnQuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9HbGVtbVNlcnZpY2VzLmNvbnRhaW5lciBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9HbGVtbVNlcnZpY2VzLmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjgyMzRlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L0dsZW1tU2VydmljZXMuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9HbGVtbVNlcnZpY2VzMi5jb250YWluZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1TZXJ2aWNlczIuY29udGFpbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMDQ1NjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvR2xlbW1TZXJ2aWNlczIuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9Kc29uVHJhdmVyc2UuY29udGFpbmVyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L0pzb25UcmF2ZXJzZS5jb250YWluZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwZmU0NgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9Kc29uVHJhdmVyc2UuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9UZXN0cy5jb250YWluZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvVGVzdHMuY29udGFpbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTM4OWMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvVGVzdHMuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC9VdGlscy5jb250YWluZXIgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvVXRpbHMuY29udGFpbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjkyMTIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5qZHQvVXRpbHMuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC93Zm9ybVNlcnZpY2VKYXIuY29udGFpbmVyIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L3dmb3JtU2VydmljZUphci5jb250YWluZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhNzUyYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC93Zm9ybVNlcnZpY2VKYXIuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC93Zm9ybVNlcnZpY2VzLmNvbnRhaW5lciBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmpkdC93Zm9ybVNlcnZpY2VzLmNvbnRhaW5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFmZTZiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUuamR0L3dmb3JtU2VydmljZXMuY29udGFpbmVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxhdW5jaGluZy9sYXVuY2hlcy9tMmNvbmY2MzIwOTk0MTMwNTI5NzQ1NTYxLnRtcCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxhdW5jaGluZy9sYXVuY2hlcy9tMmNvbmY2MzIwOTk0MTMwNTI5NzQ1NTYxLnRtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA2MWIyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubGF1bmNoaW5nL2xhdW5jaGVzL20yY29uZjYzMjA5OTQxMzA1Mjk3NDU1NjEudG1wCkBAIC0wLDAgKzEsNDUgQEAKK21haW4gaXMgb3JnLmFwYWNoZS5tYXZlbi5jbGkuTWF2ZW5DbGkgZnJvbSBwbGV4dXMuY29yZQorW3BsZXh1cy5jb3JlXQorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XAorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItdXRpbC0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLW1vZGVsLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcY29tbW9ucy1pby0yLjUuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xjb21tb25zLWNsaS0xLjQuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMtMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1jb3JlLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLWludGVycG9sYXRpb24tMS4yNC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGd1aWNlLTQuMC1ub19hb3AuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xvcmcuZWNsaXBzZS5zaXN1LmluamVjdC0wLjMuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHBsZXh1cy1zZWMtZGlzcGF0Y2hlci0xLjQuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xwbGV4dXMtY2lwaGVyLTEuNy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXNldHRpbmdzLWJ1aWxkZXItMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1jb21wYXQtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1lbWJlZGRlci0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGFldGhlci1jb25uZWN0b3Itb2todHRwLTAuMTcuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG9yZy5lY2xpcHNlLnNpc3UucGxleHVzLTAuMy4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcY2RpLWFwaS0xLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xva2lvLTEuMTIuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXNldHRpbmdzLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcb2todHRwLTMuNy4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItYXBpLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLWltcGwtMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xqc3IyNTAtYXBpLTEuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHdhZ29uLWZpbGUtMy4wLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1wcm92aWRlci0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGNvbW1vbnMtbGFuZzMtMy41LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcZ3VhdmEtMjAuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLXNwaS0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWFydGlmYWN0LTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLXV0aWxzLTMuMS4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHdhZ29uLXByb3ZpZGVyLWFwaS0zLjAuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWJ1aWxkZXItc3VwcG9ydC0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXNoYXJlZC11dGlscy0zLjIuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLW1vZGVsLWJ1aWxkZXItMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1wbHVnaW4tYXBpLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZS5zbGY0ai5zaW1wbGVfMS45LjAuMjAxODA2MDYtMjAzNVwKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWUuc2xmNGouc2ltcGxlXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xzbGY0ai1zaW1wbGUtMS43LjUuamFyCitsb2FkIEM6XFVzZXJzXEJvZG1lclwuZWNsaXBzZVxvcmcuZWNsaXBzZS5wbGF0Zm9ybV80LjguMF8xNzA5OTgwNDgxX3dpbjMyX3dpbjMyX3g4Nl82NFxjb25maWd1cmF0aW9uXG9yZy5lY2xpcHNlLm9zZ2lcMjdcMFwuY3BcCitsb2FkIEM6XFVzZXJzXEJvZG1lclwuZWNsaXBzZVxvcmcuZWNsaXBzZS5wbGF0Zm9ybV80LjguMF8xNzA5OTgwNDgxX3dpbjMyX3dpbjMyX3g4Nl82NFxjb25maWd1cmF0aW9uXG9yZy5lY2xpcHNlLm9zZ2lcOTg3XDBcLmNwXApkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubGF1bmNoaW5nL2xhdW5jaGVzL20yY29uZjY1NjAxMjkwODU4NDk3MzEyMDEudG1wIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubGF1bmNoaW5nL2xhdW5jaGVzL20yY29uZjY1NjAxMjkwODU4NDk3MzEyMDEudG1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDYxYjIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sYXVuY2hpbmcvbGF1bmNoZXMvbTJjb25mNjU2MDEyOTA4NTg0OTczMTIwMS50bXAKQEAgLTAsMCArMSw0NSBAQAorbWFpbiBpcyBvcmcuYXBhY2hlLm1hdmVuLmNsaS5NYXZlbkNsaSBmcm9tIHBsZXh1cy5jb3JlCitbcGxleHVzLmNvcmVdCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci11dGlsLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tbW9kZWwtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xjb21tb25zLWlvLTIuNS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGNvbW1vbnMtY2xpLTEuNC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLWNvbm5lY3Rvci1iYXNpYy0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWNvcmUtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xwbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcZ3VpY2UtNC4wLW5vX2FvcC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG9yZy5lY2xpcHNlLnNpc3UuaW5qZWN0LTAuMy4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNccGxleHVzLXNlYy1kaXNwYXRjaGVyLTEuNC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHBsZXh1cy1jaXBoZXItMS43LmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWNvbXBhdC0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLWVtYmVkZGVyLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAtMC4xNy4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcb3JnLmVjbGlwc2Uuc2lzdS5wbGV4dXMtMC4zLjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xjZGktYXBpLTEuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG9raW8tMS4xMi4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tc2V0dGluZ3MtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xva2h0dHAtMy43LjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXNvbHZlci1hcGktMS4xLjEuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xwbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItaW1wbC0xLjEuMS5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXGpzcjI1MC1hcGktMS4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcd2Fnb24tZmlsZS0zLjAuMC5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXJlc29sdmVyLXByb3ZpZGVyLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItdHJhbnNwb3J0LXdhZ29uLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcY29tbW9ucy1sYW5nMy0zLjUuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xndWF2YS0yMC4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tcmVzb2x2ZXItc3BpLTEuMS4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tYXJ0aWZhY3QtMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xwbGV4dXMtdXRpbHMtMy4xLjAuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lXzEuOS4wLjIwMTgwNjA2LTIwMzVcamFyc1xtYXZlbi1yZXBvc2l0b3J5LW1ldGFkYXRhLTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcd2Fnb24tcHJvdmlkZXItYXBpLTMuMC4wLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tYnVpbGRlci1zdXBwb3J0LTMuNS4zLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4xLmphcgorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZV8xLjkuMC4yMDE4MDYwNi0yMDM1XGphcnNcbWF2ZW4tbW9kZWwtYnVpbGRlci0zLjUuMy5qYXIKK2xvYWQgQzpcUHJvZ3JhbSBGaWxlc1xlY2xpcHNlXHBsdWdpbnNcb3JnLmVjbGlwc2UubTJlLm1hdmVuLnJ1bnRpbWVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXG1hdmVuLXBsdWdpbi1hcGktMy41LjMuamFyCitsb2FkIEM6XFByb2dyYW0gRmlsZXNcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLm0yZS5tYXZlbi5ydW50aW1lLnNsZjRqLnNpbXBsZV8xLjkuMC4yMDE4MDYwNi0yMDM1XAorbG9hZCBDOlxQcm9ncmFtIEZpbGVzXGVjbGlwc2VccGx1Z2luc1xvcmcuZWNsaXBzZS5tMmUubWF2ZW4ucnVudGltZS5zbGY0ai5zaW1wbGVfMS45LjAuMjAxODA2MDYtMjAzNVxqYXJzXHNsZjRqLXNpbXBsZS0xLjcuNS5qYXIKK2xvYWQgQzpcVXNlcnNcQm9kbWVyXC5lY2xpcHNlXG9yZy5lY2xpcHNlLnBsYXRmb3JtXzQuOC4wXzE3MDk5ODA0ODFfd2luMzJfd2luMzJfeDg2XzY0XGNvbmZpZ3VyYXRpb25cb3JnLmVjbGlwc2Uub3NnaVwyN1wwXC5jcFwKK2xvYWQgQzpcVXNlcnNcQm9kbWVyXC5lY2xpcHNlXG9yZy5lY2xpcHNlLnBsYXRmb3JtXzQuOC4wXzE3MDk5ODA0ODFfd2luMzJfd2luMzJfeDg2XzY0XGNvbmZpZ3VyYXRpb25cb3JnLmVjbGlwc2Uub3NnaVw5ODdcMFwuY3BcCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmNvbmZpZ3VyYXRpb24vMC5sb2cgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmNvbmZpZ3VyYXRpb24vMC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0ZjI1NQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UubTJlLmxvZ2JhY2suY29uZmlndXJhdGlvbi8wLmxvZwpAQCAtMCwwICsxLDk5ODcgQEAKKzIwMTktMTEtMTIgMTI6MjY6NDcsNTUxIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMTktMTEtMTUgMTM6NTU6MDksMTQ5IFtNb2RhbENvbnRleHRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9hcmNoZXR5cGVzL21hdmVuLWFyY2hldHlwZS1hcmNoZXR5cGUvMS4wL21hdmVuLWFyY2hldHlwZS1hcmNoZXR5cGUtMS4wLmphcgorMjAxOS0xMS0xNSAxMzo1NTowOSwxODIgW01vZGFsQ29udGV4dF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vYXJjaGV0eXBlcy9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLzEuMC9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLTEuMC5qYXIKKzIwMTktMTEtMTUgMTM6NTU6MDksMTk0IFtNb2RhbENvbnRleHRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9hcmNoZXR5cGVzL21hdmVuLWFyY2hldHlwZS1hcmNoZXR5cGUvMS4wL21hdmVuLWFyY2hldHlwZS1hcmNoZXR5cGUtMS4wLnBvbQorMjAxOS0xMS0xNSAxMzo1NTowOSwyMDUgW01vZGFsQ29udGV4dF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vYXJjaGV0eXBlcy9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLzEuMC9tYXZlbi1hcmNoZXR5cGUtYXJjaGV0eXBlLTEuMC5wb20KKzIwMTktMTEtMjAgMTY6MjE6NTUsNTc2IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMTktMTEtMjAgMTY6MjI6MTIsMzIzIFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBVcGRhdGluZyBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBmYWlsZWQuIFVzaW5nIG91dGRhdGVkIGNhY2hlLgorMjAxOS0xMS0yMCAxNjo0ODo0Miw3MDYgW01vZGFsQ29udGV4dF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL2FyY2hldHlwZXMvbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcC8xLjAvbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcC0xLjAuamFyCisyMDE5LTExLTIwIDE2OjQ4OjQyLDczOSBbTW9kYWxDb250ZXh0XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9hcmNoZXR5cGVzL21hdmVuLWFyY2hldHlwZS13ZWJhcHAvMS4wL21hdmVuLWFyY2hldHlwZS13ZWJhcHAtMS4wLmphcgorMjAxOS0xMS0yMCAxNjo0ODo0Miw3NTcgW01vZGFsQ29udGV4dF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL2FyY2hldHlwZXMvbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcC8xLjAvbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcC0xLjAucG9tCisyMDE5LTExLTIwIDE2OjQ4OjQyLDc3MSBbTW9kYWxDb250ZXh0XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9hcmNoZXR5cGVzL21hdmVuLWFyY2hldHlwZS13ZWJhcHAvMS4wL21hdmVuLWFyY2hldHlwZS13ZWJhcHAtMS4wLnBvbQorMjAxOS0xMS0yMCAxNjo0OTo0OSw0NTYgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gQ29sbGVjdGluZyBwcm9qZWN0IGluZm8gJy9wb20ueG1sJyBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW1ccG9tLnhtbAorMjAxOS0xMS0yMCAxNjo0OTo1MywzNzYgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlci1tYW5hZ2VyLzIuMi9wbGV4dXMtY29tcGlsZXItbWFuYWdlci0yLjIucG9tCisyMDE5LTExLTIwIDE2OjQ5OjUzLDM5NyBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItbWFuYWdlci8yLjIvcGxleHVzLWNvbXBpbGVyLW1hbmFnZXItMi4yLnBvbQorMjAxOS0xMS0yMCAxNjo0OTo1Myw0MTUgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlci1qYXZhYy8yLjIvcGxleHVzLWNvbXBpbGVyLWphdmFjLTIuMi5wb20KKzIwMTktMTEtMjAgMTY6NDk6NTMsNDMwIFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlci1qYXZhYy8yLjIvcGxleHVzLWNvbXBpbGVyLWphdmFjLTIuMi5wb20KKzIwMTktMTEtMjAgMTY6NDk6NTMsNDQ2IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXJzLzIuMi9wbGV4dXMtY29tcGlsZXJzLTIuMi5wb20KKzIwMTktMTEtMjAgMTY6NDk6NTMsNDYxIFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlcnMvMi4yL3BsZXh1cy1jb21waWxlcnMtMi4yLnBvbQorMjAxOS0xMS0yMCAxNjo0OTo1Myw3MTQgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMC4xL21hdmVuLXNoYXJlZC11dGlscy0wLjEuamFyCisyMDE5LTExLTIwIDE2OjQ5OjUzLDc2NiBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzAuMS9tYXZlbi1zaGFyZWQtdXRpbHMtMC4xLmphcgorMjAxOS0xMS0yMCAxNjo0OTo1Myw3NzcgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlci1tYW5hZ2VyLzIuMi9wbGV4dXMtY29tcGlsZXItbWFuYWdlci0yLjIuamFyCisyMDE5LTExLTIwIDE2OjQ5OjUzLDc5MiBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcGlsZXItbWFuYWdlci8yLjIvcGxleHVzLWNvbXBpbGVyLW1hbmFnZXItMi4yLmphcgorMjAxOS0xMS0yMCAxNjo0OTo1Myw4MDMgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlci1qYXZhYy8yLjIvcGxleHVzLWNvbXBpbGVyLWphdmFjLTIuMi5qYXIKKzIwMTktMTEtMjAgMTY6NDk6NTMsODE5IFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21waWxlci1qYXZhYy8yLjIvcGxleHVzLWNvbXBpbGVyLWphdmFjLTIuMi5qYXIKKzIwMTktMTEtMjAgMTY6NDk6NTQsNzIyIFtXb3JrZXItMjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOmdsZW1tOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHBvbS54bWwuCisyMDE5LTExLTIwIDE2OjQ5OjU2LDE5NiBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9nbGVtbS9zcmMvbWFpbi9qYXZhCisyMDE5LTExLTIwIDE2OjQ5OjU2LDE5NyBbV29ya2VyLTIyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyByZXNvdXJjZSBmb2xkZXIgL2dsZW1tL3NyYy9tYWluL3Jlc291cmNlcworMjAxOS0xMS0yMCAxNjo0OTo1NiwxOTcgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvZ2xlbW0vc3JjL3Rlc3QvamF2YQorMjAxOS0xMS0yMCAxNjo0OTo1NywxNjMgW1dvcmtlci0yNTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qdW5pdC9qdW5pdC8zLjguMS9qdW5pdC0zLjguMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMCAxNjo0OTo1NywxOTggW1dvcmtlci0yNTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2p1bml0L2p1bml0LzMuOC4xL2p1bml0LTMuOC4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIwIDE2OjQ5OjU3LDM1MSBbV29ya2VyLTI1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIERvd25sb2FkZWQgc291cmNlcyBmb3IganVuaXQ6anVuaXQ6My44LjEKKzIwMTktMTEtMjAgMTY6NDk6NTcsMzU0IFtXb3JrZXItMjU6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBqdW5pdDpqdW5pdDozLjguMQorMjAxOS0xMS0yMCAxNjo0OTo1OSwzNjMgW1dvcmtlci0yMjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDkgc2VjCisyMDE5LTExLTIwIDE2OjQ5OjU5LDY3NyBbV29ya2VyLTI3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMCAxNjo0OTo1OSw2OTUgW1dvcmtlci0yNzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMCAxNjo0OTo1OSw2OTcgW1dvcmtlci0yNzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTY6NDk6NTksNjk4IFtXb3JrZXItMjc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW1cc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIwIDE2OjUyOjAzLDE3OSBbV29ya2VyLTI4OiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtcXVpY2tzdGFydF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gQ29sbGVjdGluZyBwcm9qZWN0IGluZm8gJy9wb20ueG1sJyBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sCisyMDE5LTExLTIwIDE2OjUyOjAzLDU2MyBbV29ya2VyLTI4OiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtcXVpY2tzdGFydF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDE5LTExLTIwIDE2OjUyOjAzLDkzMCBbV29ya2VyLTI4OiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtcXVpY2tzdGFydF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvbWFpbi9qYXZhCisyMDE5LTExLTIwIDE2OjUyOjAzLDkzMyBbV29ya2VyLTI4OiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtcXVpY2tzdGFydF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhCisyMDE5LTExLTIwIDE2OjUyOjAzLDk2NyBbV29ya2VyLTI4OiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtcXVpY2tzdGFydF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDAgc2VjCisyMDE5LTExLTIwIDE2OjUyOjA0LDI2MyBbV29ya2VyLTI4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgJ1VURi04JyBlbmNvZGluZyB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcy4KKzIwMTktMTEtMjAgMTY6NTI6MDQsMjY0IFtXb3JrZXItMjg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMTktMTEtMjAgMTY6NTI6MDQsMjY2IFtXb3JrZXItMjg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyAnVVRGLTgnIGVuY29kaW5nIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLgorMjAxOS0xMS0yMCAxNjo1MjowNCwyNjYgW1dvcmtlci0yODogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMCAxNjo1NDo0MCw3MzYgW1dvcmtlci0yODogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMTktMTEtMjAgMTY6NTQ6NDAsODgyIFtXb3JrZXItMjg6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvbWFpbi9qYXZhCisyMDE5LTExLTIwIDE2OjU0OjQwLDg4MyBbV29ya2VyLTI4OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL3Rlc3QvamF2YQorMjAxOS0xMS0yMCAxNjo1NDo0MCw5MDggW1dvcmtlci0yODogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMCBzZWMKKzIwMTktMTEtMjAgMTY6NTQ6NDEsMjIzIFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyAnVVRGLTgnIGVuY29kaW5nIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLgorMjAxOS0xMS0yMCAxNjo1NDo0MSwyMjMgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAxOS0xMS0yMCAxNjo1NDo0MSwyMjUgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nICdVVEYtOCcgZW5jb2RpbmcgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMuCisyMDE5LTExLTIwIDE2OjU0OjQxLDIyNSBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIwIDE3OjAxOjQxLDk0MiBbV29ya2VyLTMyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOmdsZW1tOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHBvbS54bWwuCisyMDE5LTExLTIwIDE3OjAxOjQyLDU2NCBbV29ya2VyLTMyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMCAxNzowMTo0Miw1NjYgW1dvcmtlci0zMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMCAxNzowMTo0Miw1NjggW1dvcmtlci0zMjogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTc6MDE6NDIsNTY5IFtXb3JrZXItMzI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW1cc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIwIDE3OjAxOjQyLDU2OSBbV29ya2VyLTMyOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgZ2xlbW0KKzIwMTktMTEtMjAgMTc6MDE6NDIsNTcwIFtXb3JrZXItMzI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgZ2xlbW0KKzIwMTktMTEtMjAgMTc6MDE6NDIsNTc1IFtXb3JrZXItMzI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIwIDE3OjAxOjQzLDY5OCBbV29ya2VyLTM3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMCAxNzowMTo0Myw3MDUgW1dvcmtlci0zNzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMCAxNzowMTo0Myw3MDYgW1dvcmtlci0zNzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTc6MDE6NDMsNzA3IFtXb3JrZXItMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW1cc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIwIDE3OjAzOjA4LDk5NSBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMCAxNzowMzowOCw5OTcgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMCAxNzowMzowOCw5OTggW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjAgMTc6MDM6MDksMDAxIFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW1cc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDA5OjA5OjE5LDIyNyBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOmdsZW1tOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXGdsZW1tXHBvbS54bWwuCisyMDE5LTExLTIxIDA5OjA5OjE5LDY1NCBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTowOToxOSw2NTcgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAwOTowOToxOSw2NTkgW1dvcmtlci0zMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6MDk6MTksNjYwIFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW1cc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDA5OjA5OjE5LDY2MCBbV29ya2VyLTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgZ2xlbW0KKzIwMTktMTEtMjEgMDk6MDk6MTksNjYwIFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgZ2xlbW0KKzIwMTktMTEtMjEgMDk6MDk6MTksNjYzIFtXb3JrZXItMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjQ0OjMyLDgxNiBbV29ya2VyLTYyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBDb2xsZWN0aW5nIHByb2plY3QgaW5mbyAnL3BvbS54bWwnIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwKKzIwMTktMTEtMjEgMDk6NDQ6MzIsOTAxIFtXb3JrZXItNjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAxOS0xMS0yMSAwOTo0NDozMiw5ODkgW1dvcmtlci02MjogQ3JlYXRpbmcgbWF2ZW4tYXJjaGV0eXBlLXdlYmFwcF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvbWFpbi9qYXZhCisyMDE5LTExLTIxIDA5OjQ0OjMyLDk4OSBbV29ya2VyLTYyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyByZXNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzCisyMDE5LTExLTIxIDA5OjQ0OjMyLDk4OSBbV29ya2VyLTYyOiBDcmVhdGluZyBtYXZlbi1hcmNoZXR5cGUtd2ViYXBwXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYy90ZXN0L2phdmEKKzIwMTktMTEtMjEgMDk6NDQ6MzMsODg2IFtXb3JrZXItNjI6IENyZWF0aW5nIG1hdmVuLWFyY2hldHlwZS13ZWJhcHBdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAxIHNlYworMjAxOS0xMS0yMSAwOTo0NDozNCwwNjIgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NDQ6MzQsMDYzIFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMDk6NDQ6MzQsMDY0IFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjQ0OjM0LDA2NSBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDA5OjQ0OjM0LDI1OSBbV29ya2VyLTQ1OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0NDozNCwyNjAgW1dvcmtlci00NTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAwOTo0NDozNCwyNjEgW1dvcmtlci00NTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NDQ6MzQsMjYxIFtXb3JrZXItNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMDk6NDg6MDIsMDc5IFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjQ4OjAyLDA4MSBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDA5OjQ4OjAyLDA4MiBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0ODowMiwwODUgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAwOTo0ODoyNyw1NDMgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMTktMTEtMjEgMDk6NDg6MjgsMDQzIFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjQ4OjI4LDA0NiBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDA5OjQ4OjI4LDA0NyBbV29ya2VyLTYwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo0ODoyOCwwNDggW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAwOTo0ODoyOCwwNDkgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMDk6NDg6MjgsMDQ5IFtXb3JrZXItNjA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMSAwOTo0ODoyOCwwNTMgW1dvcmtlci02MDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMDk6NTQ6NDIsNjcxIFtXb3JrZXItNjk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDA5OjU0OjQyLDY3MiBbV29ya2VyLTY5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDA5OjU0OjQyLDY3MyBbV29ya2VyLTY5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAwOTo1NDo0Miw2NzQgW1dvcmtlci02OTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMDo0ODoxNyw3MjcgW1dvcmtlci04MDogQnVpbGRpbmcgUHJvamVjdCBHbGVtbVNlcnZpY2VzXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NDg6MTcsNzI4IFtXb3JrZXItODA6IEJ1aWxkaW5nIFByb2plY3QgR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTA6NDg6MTcsNzI5IFtXb3JrZXItODA6IEJ1aWxkaW5nIFByb2plY3QgR2xlbW1TZXJ2aWNlc10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjQ4OjE3LDczMCBbV29ya2VyLTgwOiBCdWlsZGluZyBQcm9qZWN0IEdsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEwOjQ5OjAxLDkxOCBbV29ya2VyLTgzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo0OTowMSw5MTkgW1dvcmtlci04MzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMDo0OTowMSw5MjAgW1dvcmtlci04MzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NDk6MDEsOTIyIFtXb3JrZXItODM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTA6NTQ6MjgsODU5IFtXb3JrZXItODE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDE5LTExLTIxIDEwOjU0OjI5LDI2NiBbV29ya2VyLTgxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo1NDoyOSwyNjggW1dvcmtlci04MTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMDo1NDoyOSwyNzEgW1dvcmtlci04MTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NTQ6MjksMjcyIFtXb3JrZXItODE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTA6NTQ6MjksMjcyIFtXb3JrZXItODE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEwOjU0OjI5LDI3MiBbV29ya2VyLTgxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMTA6NTQ6MjksMjc2IFtXb3JrZXItODE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjU0OjMwLDM1NiBbV29ya2VyLTg3OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo1NDozMCwzNTcgW1dvcmtlci04NzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMDo1NDozMCwzNTggW1dvcmtlci04NzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTA6NTQ6MzAsMzU5IFtXb3JrZXItODc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTA6NTY6MzMsMTg5IFtXb3JrZXItODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEwOjU2OjMzLDE5MCBbV29ya2VyLTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjEgMTA6NTY6MzcsMDU5IFtXb3JrZXItODQ6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEwOjU2OjM3LDA2MSBbV29ya2VyLTg0OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEwOjU2OjM3LDA2MiBbV29ya2VyLTg0OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMDo1NjozNywwNjMgW1dvcmtlci04NDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoxOTo1NiwyNzkgW1dvcmtlci0xMDE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjE5OjU2LDM0MiBbV29ya2VyLTEwMTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoxOTo1NiwzNDMgW1dvcmtlci0xMDE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjE5OjU2LDM0NCBbV29ya2VyLTEwMTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyMDo1MCw1ODMgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjIwOjUwLDU4NCBbV29ya2VyLTEwMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyMDo1MCw1ODUgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjIwOjUwLDU4NiBbV29ya2VyLTEwMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyMjowMSw2NTYgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjIyOjAxLDY1OCBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyMjowMSw2NTkgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjIyOjAxLDY2MCBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyMjozMSw1MzcgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjIyOjMxLDUzOCBbV29ya2VyLTEwMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyMjozMSw1MzkgW1dvcmtlci0xMDI6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjIyOjMxLDU0MiBbV29ya2VyLTEwMjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyNDowNiwwOTcgW1dvcmtlci0xMDM6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDE5LTExLTIxIDEzOjI0OjA2LDU4OCBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjQ6MDYsNTkwIFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEzOjI0OjA2LDU5MiBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjQ6MDYsNTkyIFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEzOjI0OjA2LDU5MyBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMTM6MjQ6MDYsNTkzIFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMTM6MjQ6MDYsNTk3IFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyNDowNyw1OTkgW1dvcmtlci0xMDY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvamF2YXgvd3MvcnMvamF2YXgud3MucnMtYXBpLzIuMC9qYXZheC53cy5ycy1hcGktMi4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI0OjA3LDYzNSBbV29ya2VyLTEwNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2phdmF4L3dzL3JzL2phdmF4LndzLnJzLWFwaS8yLjAvamF2YXgud3MucnMtYXBpLTIuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyNDowNyw2ODcgW1dvcmtlci0xMDQ6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI0OjA3LDY4OCBbV29ya2VyLTEwNDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyNDowNyw2OTAgW1dvcmtlci0xMDQ6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjI0OjA3LDY5MSBbV29ya2VyLTEwNDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzoyNDowNyw4NzAgW1dvcmtlci0xMDY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBqYXZheC53cy5yczpqYXZheC53cy5ycy1hcGk6Mi4wCisyMDE5LTExLTIxIDEzOjI0OjA4LDczMyBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjQ6MDgsNzM0IFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEzOjI0OjA4LDczNSBbV29ya2VyLTEwMzogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjQ6MDgsNzM3IFtXb3JrZXItMTAzOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEzOjI2OjExLDM4OSBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMSAxMzoyNjoxMSwzODkgW1dvcmtlci05ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIxIDEzOjI2OjEzLDU4OSBbV29ya2VyLTk4OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzoyNjoxMyw1OTEgW1dvcmtlci05ODogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzoyNjoxMyw1OTIgW1dvcmtlci05ODogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MjY6MTMsNTk0IFtXb3JrZXItOTg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjEgMTM6Mjg6MzcsNjM2IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL20yZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGkvMC4zLjEvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGktMC4zLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzcsNjQ0IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9pby90YWthcmkvbTJlL3dvcmtzcGFjZS9vcmcuZWNsaXBzZS5tMmUud29ya3NwYWNlLmNsaS8wLjMuMS9vcmcuZWNsaXBzZS5tMmUud29ya3NwYWNlLmNsaS0wLjMuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozNyw4NjYgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jbGFzc3dvcmxkcy8yLjUuMi9wbGV4dXMtY2xhc3N3b3JsZHMtMi41LjItc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzcsOTQ3IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jbGFzc3dvcmxkcy8yLjUuMi9wbGV4dXMtY2xhc3N3b3JsZHMtMi41LjItc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzgsMDkwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci11dGlsLzEuMS4xL21hdmVuLXJlc29sdmVyLXV0aWwtMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzgsMTA5IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXV0aWwvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItdXRpbC0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOCwzMDQgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLW1vZGVsLzMuNS4zL21hdmVuLW1vZGVsLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM4LDMyNCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1tb2RlbC8zLjUuMy9tYXZlbi1tb2RlbC0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOCw0OTQgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi41L2NvbW1vbnMtaW8tMi41LXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM4LDUyMyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNS9jb21tb25zLWlvLTIuNS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOCw3NzIgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWNsaS9jb21tb25zLWNsaS8xLjQvY29tbW9ucy1jbGktMS40LXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM4LDc5NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1jbGkvY29tbW9ucy1jbGkvMS40L2NvbW1vbnMtY2xpLTEuNC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOSwwNDUgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLWNvbm5lY3Rvci1iYXNpYy8xLjEuMS9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMtMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksMDU5IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLWNvbm5lY3Rvci1iYXNpYy8xLjEuMS9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMtMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksMjQwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb3JlLzMuNS4zL21hdmVuLWNvcmUtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksMzYxIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWNvcmUvMy41LjMvbWF2ZW4tY29yZS0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOSw1MzIgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODozOSw1ODkgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDc1MCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLXNlYy1kaXNwYXRjaGVyLzEuNC9wbGV4dXMtc2VjLWRpc3BhdGNoZXItMS40LXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjM5LDc4MSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3BsZXh1cy9wbGV4dXMtc2VjLWRpc3BhdGNoZXIvMS40L3BsZXh1cy1zZWMtZGlzcGF0Y2hlci0xLjQtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksOTYxIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1zZXR0aW5ncy1idWlsZGVyLzMuNS4zL21hdmVuLXNldHRpbmdzLWJ1aWxkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6MzksOTcyIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXNldHRpbmdzLWJ1aWxkZXIvMy41LjMvbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MCwxMDcgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWNvbXBhdC8zLjUuMy9tYXZlbi1jb21wYXQtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsMTM5IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWNvbXBhdC8zLjUuMy9tYXZlbi1jb21wYXQtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsMjg2IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1lbWJlZGRlci8zLjUuMy9tYXZlbi1lbWJlZGRlci0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MCwzMDMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tZW1iZWRkZXIvMy41LjMvbWF2ZW4tZW1iZWRkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsNDQxIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL2FldGhlci9hZXRoZXItY29ubmVjdG9yLW9raHR0cC8wLjE3LjMvYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAtMC4xNy4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDQ2MiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL2FldGhlci9hZXRoZXItY29ubmVjdG9yLW9raHR0cC8wLjE3LjMvYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAtMC4xNy4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDY2NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2lvL29raW8vMS4xMi4wL29raW8tMS4xMi4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQwLDY5MyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3NxdWFyZXVwL29raW8vb2tpby8xLjEyLjAvb2tpby0xLjEyLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDAsOTQ2IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1zZXR0aW5ncy8zLjUuMy9tYXZlbi1zZXR0aW5ncy0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MCw5NjAgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MvMy41LjMvbWF2ZW4tc2V0dGluZ3MtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsMTIxIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3NxdWFyZXVwL29raHR0cDMvb2todHRwLzMuNy4wL29raHR0cC0zLjcuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MSwxNTggW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9zcXVhcmV1cC9va2h0dHAzL29raHR0cC8zLjcuMC9va2h0dHAtMy43LjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsMzg4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1hcGkvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItYXBpLTEuMS4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDQxMCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1hcGkvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItYXBpLTEuMS4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDU1MyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQxLDU2MiBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsNzE4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1pbXBsLzEuMS4xL21hdmVuLXJlc29sdmVyLWltcGwtMS4xLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDEsNzQ3IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLWltcGwvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItaW1wbC0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MSw4OTggW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLWZpbGUvMy4wLjAvd2Fnb24tZmlsZS0zLjAuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MSw5MTAgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vd2Fnb24vd2Fnb24tZmlsZS8zLjAuMC93YWdvbi1maWxlLTMuMC4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQyLDA3NyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcmVzb2x2ZXItcHJvdmlkZXIvMy41LjMvbWF2ZW4tcmVzb2x2ZXItcHJvdmlkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDIsMDg3IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLzMuNS4zL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQyLDIyNSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItdHJhbnNwb3J0LXdhZ29uLzEuMS4xL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MiwyMzQgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItdHJhbnNwb3J0LXdhZ29uLzEuMS4xL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Miw0MTkgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZ29vZ2xlL2d1YXZhL2d1YXZhLzIwLjAvZ3VhdmEtMjAuMC1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Miw0OTggW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9nb29nbGUvZ3VhdmEvZ3VhdmEvMjAuMC9ndWF2YS0yMC4wLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQyLDY4MyBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItc3BpLzEuMS4xL21hdmVuLXJlc29sdmVyLXNwaS0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Miw3MDAgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItc3BpLzEuMS4xL21hdmVuLXJlc29sdmVyLXNwaS0xLjEuMS1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0Miw4MzggW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFydGlmYWN0LzMuNS4zL21hdmVuLWFydGlmYWN0LTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQyLDg0OSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcnRpZmFjdC8zLjUuMy9tYXZlbi1hcnRpZmFjdC0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MywwMTMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsMDQwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsMTc4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1yZXBvc2l0b3J5LW1ldGFkYXRhLzMuNS4zL21hdmVuLXJlcG9zaXRvcnktbWV0YWRhdGEtMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsMTg3IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlcG9zaXRvcnktbWV0YWRhdGEvMy41LjMvbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzoyODo0MywzNjMgW1dvcmtlci0xMDg6IFNlYXJjaGluZy4uLl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLXByb3ZpZGVyLWFwaS8zLjAuMC93YWdvbi1wcm92aWRlci1hcGktMy4wLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsMzgwIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLXByb3ZpZGVyLWFwaS8zLjAuMC93YWdvbi1wcm92aWRlci1hcGktMy4wLjAtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsNTQyIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1idWlsZGVyLXN1cHBvcnQvMy41LjMvbWF2ZW4tYnVpbGRlci1zdXBwb3J0LTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDU1MSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1idWlsZGVyLXN1cHBvcnQvMy41LjMvbWF2ZW4tYnVpbGRlci1zdXBwb3J0LTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDcyNSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMS9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjEtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDMsNzUxIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjEvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4xLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDkxNSBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tbW9kZWwtYnVpbGRlci8zLjUuMy9tYXZlbi1tb2RlbC1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDE5LTExLTIxIDEzOjI4OjQzLDkzOCBbV29ya2VyLTEwODogU2VhcmNoaW5nLi4uXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1tb2RlbC1idWlsZGVyLzMuNS4zL21hdmVuLW1vZGVsLWJ1aWxkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDQsMTEzIFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1wbHVnaW4tYXBpLzMuNS4zL21hdmVuLXBsdWdpbi1hcGktMy41LjMtc291cmNlcy5qYXIKKzIwMTktMTEtMjEgMTM6Mjg6NDQsMTI4IFtXb3JrZXItMTA4OiBTZWFyY2hpbmcuLi5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBsdWdpbi1hcGkvMy41LjMvbWF2ZW4tcGx1Z2luLWFwaS0zLjUuMy1zb3VyY2VzLmphcgorMjAxOS0xMS0yMSAxMzozNTozMCwxMzggW1dvcmtlci0xMDg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjM1OjMwLDEzOSBbV29ya2VyLTEwODogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMSAxMzozNTozMCwxNDEgW1dvcmtlci0xMDg6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIxIDEzOjM1OjMwLDE0OCBbV29ya2VyLTEwODogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMSAxMzozNTo0MywwNDMgW1dvcmtlci0xMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIxIDEzOjM1OjQzLDA0MyBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIxIDEzOjM1OjQ1LDY4MiBbV29ya2VyLTExNTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MzU6NDUsNjgzIFtXb3JrZXItMTE1OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEzOjM1OjQ1LDY4NSBbV29ya2VyLTExNTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6MzU6NDUsNjg2IFtXb3JrZXItMTE1OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEzOjU3OjE5LDYzNiBbV29ya2VyLTExOTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6NTc6MTksNjM3IFtXb3JrZXItMTE5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIxIDEzOjU3OjE5LDYzOCBbV29ya2VyLTExOTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjEgMTM6NTc6MTksNjQwIFtXb3JrZXItMTE5OiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIxIDEzOjU3OjI1LDUzNCBbV29ya2VyLTEyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjEgMTM6NTc6MjUsNTM0IFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjEgMTM6NTc6MjgsMTM1IFtXb3JrZXItMTIxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzo1NzoyOCwxMzYgW1dvcmtlci0xMjE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjEgMTM6NTc6MjgsMTM4IFtXb3JrZXItMTIxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMSAxMzo1NzoyOCwxMzkgW1dvcmtlci0xMjE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6MjI6MDYsMzUyIFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOToyMjowNiwzNTUgW1dvcmtlci0xMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6MjI6MDYsMzU3IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOToyMjowNiwzNjIgW1dvcmtlci0xMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6MjI6MTIsODQyIFtXb3JrZXItMTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMiAwOToyMjoxMiw4NDIgW1dvcmtlci0xMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMiAwOToyMjoxNSw0NjEgW1dvcmtlci0xMzY6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjIyOjE1LDQ2MyBbV29ya2VyLTEzNjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMiAwOToyMjoxNSw0NjQgW1dvcmtlci0xMzY6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjIyOjE1LDQ2NyBbV29ya2VyLTEzNjogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMiAwOToyNjoyNCwxNjEgW1dvcmtlci0xMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjI2OjI0LDE2MyBbV29ya2VyLTEzNzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMiAwOToyNjoyNCwxNjUgW1dvcmtlci0xMzc6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjI2OjI0LDE2NiBbV29ya2VyLTEzNzogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMiAwOToyNjozMCw3NzUgW1dvcmtlci0xMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIyIDA5OjI2OjMwLDc3NSBbV29ya2VyLTEzOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIyIDA5OjI2OjMzLDMyMyBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MjY6MzMsMzI0IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAwIHJlc291cmNlCisyMDE5LTExLTIyIDA5OjI2OjMzLDMyNiBbV29ya2VyLTEzMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MjY6MzMsMzI4IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIyIDA5OjMyOjEzLDIzMCBbV29ya2VyLTE0MTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MzI6MTMsMjMyIFtXb3JrZXItMTQxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAxIHJlc291cmNlCisyMDE5LTExLTIyIDA5OjMyOjEzLDI0MSBbV29ya2VyLTE0MTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjIgMDk6MzI6MTMsMjQyIFtXb3JrZXItMTQxOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTIyIDA5OjMyOjQ5LDg3MyBbV29ya2VyLTEzNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjIgMDk6MzI6NDksODczIFtXb3JrZXItMTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjIgMDk6MzI6NTIsNTM0IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTozMjo1Miw1MzUgW1dvcmtlci0xMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDAgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6MzI6NTIsNTM3IFtXb3JrZXItMTMwOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTozMjo1Miw1MzggW1dvcmtlci0xMzA6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6NDM6MDMsMTI5IFtXb3JrZXItMTQ2OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTo0MzowMywxMzEgW1dvcmtlci0xNDY6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDEgcmVzb3VyY2UKKzIwMTktMTEtMjIgMDk6NDM6MDMsMTM0IFtXb3JrZXItMTQ2OiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yMiAwOTo0MzowMywxMzYgW1dvcmtlci0xNDY6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTEtMjIgMDk6NDM6MTIsNTMyIFtXb3JrZXItMTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMiAwOTo0MzoxMiw1MzIgW1dvcmtlci0xNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMiAwOTo0MzoxNSwwMjAgW1dvcmtlci0xNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjQzOjE1LDAyMSBbV29ya2VyLTE0NTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMiAwOTo0MzoxNSwwMjQgW1dvcmtlci0xNDU6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjQzOjE1LDAyNiBbV29ya2VyLTE0NTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMiAwOTo0NTozOCwwNTggW1dvcmtlci0xNDk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjQ1OjM4LDA2MCBbV29ya2VyLTE0OTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMCByZXNvdXJjZQorMjAxOS0xMS0yMiAwOTo0NTozOCwwNjEgW1dvcmtlci0xNDk6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTIyIDA5OjQ1OjM4LDA2NSBbV29ya2VyLTE0OTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yMiAwOTo0Njo1NiwyNDggW1dvcmtlci0xNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIyIDA5OjQ2OjU2LDI0OCBbV29ya2VyLTE0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIyIDEyOjQ5OjU3LDA5NCBbV29ya2VyLTI0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjIgMTI6NDk6NTcsMDk0IFtXb3JrZXItMjQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjIgMTQ6MjY6MDAsMzUxIFtXb3JrZXItMjg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yMiAxNDoyNjowMCwzNTEgW1dvcmtlci0yODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yMiAxNDozNzozMSw5NzggW1dvcmtlci0yOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTIyIDE0OjM3OjMxLDk3OCBbV29ya2VyLTI5MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTIyIDE2OjEzOjIxLDcxMyBbV29ya2VyLTMyMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjIgMTY6MTM6MjEsNzEzIFtXb3JrZXItMzIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjUgMTI6MzA6MTMsOTE2IFtXb3JrZXItMzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMTktMTEtMjUgMTI6MzA6MjAsMzM0IFtXb3JrZXItMDogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjUgMTI6MzA6MjAsMzU1IFtXb3JrZXItMDogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMSByZXNvdXJjZQorMjAxOS0xMS0yNSAxMjozMDoyMCwzNjcgW1dvcmtlci0wOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yNSAxMjozMDoyMCwzNzggW1dvcmtlci0wOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTI1IDE0OjU0OjQ3LDM4NCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNSAxNDo1NDo0NywzODQgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI1IDE1OjAyOjQzLDQxOSBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNSAxNTowMjo0Myw0MTkgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI1IDE1OjA1OjMxLDA3NiBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNSAxNTowNTozMSwwNzYgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI1IDE1OjQ1OjUxLDU1OCBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNSAxNTo0NTo1MSw1NTggW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI1IDE2OjA1OjQ0LDgxNyBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNSAxNjowNTo0NCw4MTcgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI2IDA5OjMzOjA1LDMyNyBbV29ya2VyLTMyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMDk6MzM6MDUsMzI3IFtXb3JrZXItMzIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjYgMDk6NDQ6MjcsMjQ2IFtXb3JrZXItMzIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAwOTo0NDoyNywyNDYgW1dvcmtlci0zMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNiAwOTo1MTozMywzOTUgW1dvcmtlci0zMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDA5OjUxOjMzLDM5NiBbV29ya2VyLTMzMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI2IDEwOjMyOjA1LDg1OCBbV29ya2VyLTM0ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMTA6MzI6MDUsODU5IFtXb3JrZXItMzQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjYgMTA6Mzg6MTIsNjA1IFtXb3JrZXItMzUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAxMDozODoxMiw2MDUgW1dvcmtlci0zNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNiAxMDo0MTo0OSw3NDQgW1dvcmtlci0zNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDEwOjQxOjQ5LDc0NCBbV29ya2VyLTM1MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI2IDEwOjQzOjA1LDk3NCBbV29ya2VyLTM1MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjYgMTA6NDM6MDUsOTc0IFtXb3JrZXItMzUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjYgMTE6MTI6MTQsMTg0IFtXb3JrZXItMzY3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAxMToxMjoxNCwzMDggW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTI2IDExOjEyOjE0LDMxMCBbV29ya2VyLTM2NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMSByZXNvdXJjZQorMjAxOS0xMS0yNiAxMToxMjoxNCwzMTUgW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTExLTI2IDExOjEyOjE0LDMxNiBbV29ya2VyLTM2NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMS0yNiAxMToxMjoxNCwzMTYgW1dvcmtlci0zNjY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDExOjEyOjE0LDM1MSBbV29ya2VyLTM2NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI2IDExOjEyOjE0LDQxNyBbV29ya2VyLTM2NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjYgMTE6MTI6MjksOTQwIFtXb3JrZXItMzcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNiAxMToxMjoyOSw5NDEgW1dvcmtlci0zNzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNDowMzo0Myw4OTIgW1dvcmtlci04NzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE0OjAzOjQzLDkyOSBbV29ya2VyLTg3MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE1OjM0OjQ3LDY2MSBbV29ya2VyLTkxMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTU6MzQ6NDcsNjYxIFtXb3JrZXItOTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTU6Mzg6NTMsMTY2IFtXb3JrZXItOTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNTozODo1MywxNjggW1dvcmtlci05MTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNTo0OTo1Myw1NjQgW1dvcmtlci05MTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE1OjQ5OjUzLDU2NSBbV29ya2VyLTkxNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE2OjA2OjU5LDkzNyBbV29ya2VyLTkyNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTY6MDY6NTksOTM3IFtXb3JrZXItOTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTY6NDI6NDgsMDA1IFtXb3JrZXItOTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNjo0Mjo0OCwwMDUgW1dvcmtlci05Mzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNjo0ODo0MiwzMDYgW1dvcmtlci05Mzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE2OjQ4OjQyLDMwNiBbV29ya2VyLTkzODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE2OjUwOjIwLDY1OCBbV29ya2VyLTk0NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTY6NTA6MjAsNjU4IFtXb3JrZXItOTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjcgMTY6NTI6MTksMTkwIFtXb3JrZXItOTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yNyAxNjo1MjoxOSwxOTAgW1dvcmtlci05NDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yNyAxNjo1NDoyMyw4NzIgW1dvcmtlci05NDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI3IDE2OjU0OjIzLDg3MyBbV29ya2VyLTk0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI3IDE3OjA0OjQwLDcwMCBbV29ya2VyLTk0NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjcgMTc6MDQ6NDAsNzAwIFtXb3JrZXItOTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTA6MTc6MTMsOTY3IFtXb3JrZXItMTI1NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTA6MTc6MTMsOTY3IFtXb3JrZXItMTI1NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDEwOjQ4OjIyLDM5OSBbV29ya2VyLTEyNjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDEwOjQ4OjIyLDM5OSBbV29ya2VyLTEyNjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxMDo1MDowOSw1OTYgW1dvcmtlci0xMjYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxMDo1MDowOSw1OTYgW1dvcmtlci0xMjYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTA6NTg6MDIsMDg0IFtXb3JrZXItMTI2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTA6NTg6MDIsMDg0IFtXb3JrZXItMTI2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDEyOjQwOjQ4LDUwMCBbV29ya2VyLTEzMDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDEyOjQwOjQ4LDUwMSBbV29ya2VyLTEzMDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxMzoyNjozOCwxMDAgW1dvcmtlci0xMzE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxMzoyNjozOCwxMDAgW1dvcmtlci0xMzE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTM6Mjg6NTYsMzkyIFtXb3JrZXItMTMxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTM6Mjg6NTYsMzkzIFtXb3JrZXItMTMxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDEzOjMwOjM1LDIwMiBbV29ya2VyLTEzMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDEzOjMwOjM1LDIwMiBbV29ya2VyLTEzMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMS0yOCAxMzozNDowNiw5MDUgW1dvcmtlci0xMzE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxMzozNDowNiw5MDYgW1dvcmtlci0xMzE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTQ6MDM6NTgsMjk5IFtXb3JrZXItMTMzMDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTQ6MDM6NTgsMzI0IFtXb3JrZXItMTMzMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTEtMjggMTQ6MDM6NTgsMzI2IFtXb3JrZXItMTMzMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIENvcHlpbmcgMSByZXNvdXJjZQorMjAxOS0xMS0yOCAxNDowMzo1OCwzMzAgW1dvcmtlci0xMzMxOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yOCAxNDowMzo1OCwzMzEgW1dvcmtlci0xMzMxOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDE5LTExLTI4IDE0OjAzOjU4LDMzMSBbV29ya2VyLTEzMzE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDE0OjAzOjU4LDMzMSBbV29ya2VyLTEzMzE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxNDowMzo1OCwzNDMgW1dvcmtlci0xMzMxOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMS0yOCAxNDowNDoxMyw1MDggW1dvcmtlci0xMzMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMS0yOCAxNDowNDoxMyw1MDggW1dvcmtlci0xMzMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTEtMjggMTQ6NDk6MjgsNTA0IFtXb3JrZXItMTM0ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTEtMjggMTQ6NDk6MjgsNTA0IFtXb3JrZXItMTM0ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTExLTI4IDE0OjUxOjEyLDI2NyBbV29ya2VyLTEzNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTExLTI4IDE0OjUxOjEyLDI2OCBbV29ya2VyLTEzNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wNiAxMDozMTowMCwyNDIgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAxOS0xMi0wNiAxMTowMDo0OSw4MjAgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MDA6NDksODI4IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wNiAxMTowMzo1OCwzMTYgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MDM6NTgsMzE2IFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wNiAxMTowNDozNyw3NDUgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MDQ6MzcsNzQ2IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wNiAxMTowODo1Miw4MTUgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MDg6NTIsODE2IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wNiAxMToyNjowMSw0NDMgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MjY6MDEsNDQ0IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wNiAxMTozMjozNyw2NTAgW1dvcmtlci00MDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MzI6MzgsNjcxIFtXb3JrZXItMzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA2IDExOjMyOjM4LDcwNiBbV29ya2VyLTM1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gQ29weWluZyAxIHJlc291cmNlCisyMDE5LTEyLTA2IDExOjMyOjM4LDcyNCBbV29ya2VyLTM1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMi0wNiAxMTozMjozOCw3MjUgW1dvcmtlci0zNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMi0wNiAxMTozMjozOCw3MjYgW1dvcmtlci0zNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6MzI6MzgsNzI4IFtXb3JrZXItMzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMTozMjozOCw3OTMgW1dvcmtlci0zNTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDYgMTE6MzM6NTUsNjUxIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjMzOjU1LDY1MiBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6MzQ6MTMsNDUzIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjM0OjEzLDQ1MyBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTE6NDk6NTgsNzczIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMTktMTItMDYgMTE6NTU6MDQsNTgwIFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjU1OjA1LDI1NiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA2IDExOjU1OjA1LDI2NSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDEgcmVzb3VyY2UKKzIwMTktMTItMDYgMTE6NTU6MDUsMjgzIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDYgMTE6NTU6MDUsMjg0IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMi0wNiAxMTo1NTowNSwyODYgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wNiAxMTo1NTowNSwyODcgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDYgMTE6NTU6MDUsMzE1IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDYgMTE6NTU6MTIsMzM1IFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDExOjU1OjEyLDMzNyBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTI6MTg6NTAsMTA1IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDEyOjE4OjUwLDEwNyBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTI6MzY6MDksNzA3IFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDEyOjM2OjA5LDcwOCBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTI6Mzg6MjEsOTE2IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDEyOjM4OjIxLDkxNiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTI6Mzk6MzYsNDIzIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDEyOjM5OjM2LDQyMyBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTI6NDE6MjYsMTU2IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDEyOjQxOjI2LDE1NiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDYgMTI6NDM6MjIsMTU4IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA2IDEyOjQzOjIyLDE1OSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTE6MDA6MTEsMDM4IFtXb3JrZXItMTA4NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDkgMTE6MDA6MTEsMDQxIFtXb3JrZXItMTA4NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDExOjQzOjIzLDM0MiBbV29ya2VyLTEwOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDExOjQzOjIzLDM0MiBbV29ya2VyLTEwOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wOSAxMjowMDozMiw4NDggW1dvcmtlci0xMTA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wOSAxMjowMDozMiw4NDkgW1dvcmtlci0xMTA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTI6MDE6MzQsMzc4IFtXb3JrZXItMTEwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDkgMTI6MDE6MzQsMzc4IFtXb3JrZXItMTEwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDEyOjE4OjA5LDAxOSBbV29ya2VyLTExMDk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDEyOjE4OjA5LDA3NiBbV29ya2VyLTExMDc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDE5LTEyLTA5IDEyOjE4OjA5LDA3OSBbV29ya2VyLTExMDc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDEgcmVzb3VyY2UKKzIwMTktMTItMDkgMTI6MTg6MDksMDg5IFtXb3JrZXItMTEwNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDkgMTI6MTg6MDksMDkxIFtXb3JrZXItMTEwNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAxOS0xMi0wOSAxMjoxODowOSwwOTEgW1dvcmtlci0xMTA3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAxOS0xMi0wOSAxMjoxODowOSwwOTEgW1dvcmtlci0xMTA3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMTktMTItMDkgMTI6MTg6MDksMTI5IFtXb3JrZXItMTEwNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDkgMTI6MTg6MTQsNjkzIFtXb3JrZXItMTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMTktMTItMDkgMTI6MTg6MTQsNjkzIFtXb3JrZXItMTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTA5IDEzOjU3OjAyLDM3NiBbV29ya2VyLTExNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDE5LTEyLTA5IDEzOjU3OjAyLDM3NyBbV29ya2VyLTExNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0wOSAxNDoxNTo0Myw3MDYgW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAxOS0xMi0wOSAxNTo0NDo0Niw4MzEgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi13YXItcGx1Z2luLzMuMi4xL21hdmVuLXdhci1wbHVnaW4tMy4yLjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjQ2LDk0MiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8zLjIuMS9tYXZlbi13YXItcGx1Z2luLTMuMi4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo0OSw1MTMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBHbGVtbVNlcnZpY2VzMjpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxwb20ueG1sLgorMjAxOS0xMi0wOSAxNTo0NDo0OSw2MzggW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi13YXItcGx1Z2luLzMuMi4xL21hdmVuLXdhci1wbHVnaW4tMy4yLjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjQ5LDY1NCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8zLjIuMS9tYXZlbi13YXItcGx1Z2luLTMuMi4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo0OSw2NzAgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1wbHVnaW5zLzMxL21hdmVuLXBsdWdpbnMtMzEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjQ5LDY4OSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tcGx1Z2lucy8zMS9tYXZlbi1wbHVnaW5zLTMxLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo0OSw3MDQgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcGFyZW50LzMxL21hdmVuLXBhcmVudC0zMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NDksNzI3IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcGFyZW50LzMxL21hdmVuLXBhcmVudC0zMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NDksNzQ2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2FwYWNoZS8xOS9hcGFjaGUtMTkucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjQ5LDc2MyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2FwYWNoZS8xOS9hcGFjaGUtMTkucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDExOSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDEzNSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsMTUyIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb250YWluZXJzLzEuNy4xL3BsZXh1cy1jb250YWluZXJzLTEuNy4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCwxNjggW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29udGFpbmVycy8xLjcuMS9wbGV4dXMtY29udGFpbmVycy0xLjcuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsMzgxIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzMuMi4wL21hdmVuLWFyY2hpdmVyLTMuMi4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCwzOTUgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNDI2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjAvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw0NDEgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4wL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNDc2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjUvcGxleHVzLWFyY2hpdmVyLTMuNS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNDk0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNS9wbGV4dXMtYXJjaGl2ZXItMy41LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw1MTAgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLzUuMC9wbGV4dXMtNS4wLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw1MjkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMvNS4wL3BsZXh1cy01LjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDU0OSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4wLjI0L3BsZXh1cy11dGlscy0zLjAuMjQucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDU2MyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAuMjQvcGxleHVzLXV0aWxzLTMuMC4yNC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNTgyIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMC9wbGV4dXMtaW8tMy4wLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDU5NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMC9wbGV4dXMtaW8tMy4wLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDY4OCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNC9jb21tb25zLWNvbXByZXNzLTEuMTQucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDcwNSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE0L2NvbW1vbnMtY29tcHJlc3MtMS4xNC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsNzY2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvaXE4MC9zbmFwcHkvc25hcHB5LzAuNC9zbmFwcHktMC40LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw3ODMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsODAzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvdHVrYWFuaS94ei8xLjYveHotMS42LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw4MTggW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS42L3h6LTEuNi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsODM2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjIvcGxleHVzLWludGVycG9sYXRpb24tMS4yMi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsODUzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yMi9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjIyLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MCw4OTQgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNi4wL3BsZXh1cy1hcmNoaXZlci0zLjYuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsOTA5IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNi4wL3BsZXh1cy1hcmNoaXZlci0zLjYuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTAsOTQ2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDk3MCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUwLDk5MCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjEvcGxleHVzLWlvLTMuMC4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwwMDQgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjEvcGxleHVzLWlvLTMuMC4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwwNTUgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTYuMS9jb21tb25zLWNvbXByZXNzLTEuMTYuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMDcwIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTYuMS9jb21tb25zLWNvbXByZXNzLTEuMTYuMS5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMDg1IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1wYXJlbnQvNDMvY29tbW9ucy1wYXJlbnQtNDMucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDExMCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1wYXJlbnQvNDMvY29tbW9ucy1wYXJlbnQtNDMucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDEzMiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDE4MSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy8yLjYvb2JqZW5lc2lzLTIuNi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMTk3IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy1wYXJlbnQvMi42L29iamVuZXNpcy1wYXJlbnQtMi42LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwyMTMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMtcGFyZW50LzIuNi9vYmplbmVzaXMtcGFyZW50LTIuNi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMjMxIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvdHVrYWFuaS94ei8xLjgveHotMS44LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwyNDYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMjcxIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMjg2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSwzMDQgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMzQ2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMzY2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS1wYXJlbnQvMS40LjEwL3hzdHJlYW0tcGFyZW50LTEuNC4xMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsMzg2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLXBhcmVudC8xLjQuMTAveHN0cmVhbS1wYXJlbnQtMS40LjEwLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSw0NDEgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEucG9tCisyMDE5LTEyLTA5IDE1OjQ0OjUxLDQ1NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1maWx0ZXJpbmcvMy4xLjEvbWF2ZW4tZmlsdGVyaW5nLTMuMS4xLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MSw4MjMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsODQ1IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsODYzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy8yMi9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy0yMi5wb20KKzIwMTktMTItMDkgMTU6NDQ6NTEsODgyIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLzIyL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLTIyLnBvbQorMjAxOS0xMi0wOSAxNTo0NDo1MiwwMjMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwwMzkgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDA0NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMDYzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMy4yLjAvbWF2ZW4tYXJjaGl2ZXItMy4yLjAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDA3MyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4wL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMTA4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDExNyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMy42LjAvcGxleHVzLWFyY2hpdmVyLTMuNi4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwxNDcgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtYXJjaGl2ZXIvMy42LjAvcGxleHVzLWFyY2hpdmVyLTMuNi4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwxNTYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMTc2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMTg1IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE2LjEvY29tbW9ucy1jb21wcmVzcy0xLjE2LjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDI0MiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE2LjEvY29tbW9ucy1jb21wcmVzcy0xLjE2LjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDI1MCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDI2OSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy8yLjYvb2JqZW5lc2lzLTIuNi5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMjc2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvaXE4MC9zbmFwcHkvc25hcHB5LzAuNC9zbmFwcHktMC40LmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwyOTcgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2lxODAvc25hcHB5L3NuYXBweS8wLjQvc25hcHB5LTAuNC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMzA1IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvdHVrYWFuaS94ei8xLjgveHotMS44LmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwzMjggW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMzM2IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsMzU4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LmphcgorMjAxOS0xMi0wOSAxNTo0NDo1MiwzNjYgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsNDIzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsNDMyIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDQ2NCBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDQ3MiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzMuMS4xL21hdmVuLWZpbHRlcmluZy0zLjEuMS5qYXIKKzIwMTktMTItMDkgMTU6NDQ6NTIsNDg5IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8zLjEuMS9tYXZlbi1maWx0ZXJpbmctMy4xLjEuamFyCisyMDE5LTEyLTA5IDE1OjQ0OjUyLDQ5NyBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tbWFwcGluZy8zLjAuMC9tYXZlbi1tYXBwaW5nLTMuMC4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1Miw1MTIgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tbWFwcGluZy8zLjAuMC9tYXZlbi1tYXBwaW5nLTMuMC4wLmphcgorMjAxOS0xMi0wOSAxNTo0NDo1NSw0MjMgW1dvcmtlci00ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzMi9zcmMKKzIwMTktMTItMDkgMTU6NDQ6NTUsNDI0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMyL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9HbGVtbVNlcnZpY2VzMi9zcmMKKzIwMTktMTItMDkgMTU6NDQ6NTYsMjMzIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMTktMTItMDkgMTU6NDQ6NTYsNzE4IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogR2xlbW1TZXJ2aWNlczI6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJccG9tLnhtbC4KKzIwMTktMTItMDkgMTU6NDQ6NTcsNjk0IFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDE5LTEyLTA5IDE1OjQ0OjU3LDY5NiBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzMi9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDE5LTEyLTA5IDE1OjQ0OjU4LDIyOSBbV29ya2VyLTQ4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTU6NDQ6NTgsMjUwIFtXb3JrZXItNDg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMiBzZWMKKzIwMTktMTItMDkgMTU6NTE6MTEsNjA2IFtXb3JrZXItNTI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJccG9tLnhtbC4KKzIwMTktMTItMDkgMTU6NTE6MTIsNTA4IFtXb3JrZXItNTI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0wOSAxNTo1MToxMywwMDMgW1dvcmtlci01MzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDkgMTU6NTE6MTMsMDA1IFtXb3JrZXItNTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDE5LTEyLTA5IDE1OjUxOjEzLDAwOCBbV29ya2VyLTUzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAxOS0xMi0wOSAxNTo1MToxMywwMDkgW1dvcmtlci01MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMTktMTItMDkgMTU6NTE6MTMsMDEwIFtXb3JrZXItNTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0wOSAxNTo1MToxMywwMTEgW1dvcmtlci01MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0wOSAxNTo1MToxMywwNjYgW1dvcmtlci01MzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMTktMTItMDkgMTU6NTE6MTgsMDE4IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTU6NTE6MTgsMDE5IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTU6NTg6MjIsODA0IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTU6NTg6MjIsODA1IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTY6MDM6MDksMDI2IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTY6MDM6MDksMDI2IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMDkgMTY6MTY6NTUsMDQxIFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMDkgMTY6MTY6NTUsMDQyIFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTAgMDk6NDg6NTAsNzQwIFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMTktMTItMTAgMDk6NDk6NDQsMTYwIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMCAwOTo0OTo0NCwxNjIgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDEwOjM2OjQ1LDcyOCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDEwOjM2OjQ1LDcyOSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDEwOjUwOjI5LDY0NyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEwIDEwOjUwOjI5LDY0NyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEwIDExOjAxOjE0LDQ2MyBbV29ya2VyLTI5OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMTktMTItMTAgMTE6MDM6MTIsNjEyIFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTAgMTE6MDM6MTIsNjEyIFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTAgMTE6MDU6MzgsMTg3IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTAgMTE6MDU6MzgsMTg4IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTAgMTE6MDY6MTgsOTIzIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTAgMTE6MDY6MTgsOTI0IFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTAgMTE6MDc6MjEsMzcxIFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTAgMTE6MDc6MjEsMzcxIFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTAgMTE6MTI6NDAsOTA2IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTAgMTE6MTI6NDAsOTA3IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTEgMTA6MTQ6MDUsMDE3IFtXb3JrZXItMzc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTExIDEwOjE0OjA1LDAxOCBbV29ya2VyLTM3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMSAxMTowOTo0Nyw0NDUgW1dvcmtlci0zOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTEgMTE6MDk6NDcsNDQ1IFtXb3JrZXItMzk0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTExIDEyOjU1OjQzLDA1MCBbV29ya2VyLTQzODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMSAxMjo1NTo0MywwNTEgW1dvcmtlci00Mzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTEgMTM6MDU6NTEsNDEzIFtXb3JrZXItNDQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTExIDEzOjA1OjUxLDQxNCBbV29ya2VyLTQ0MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMSAxMzowODo1OSwwNjAgW1dvcmtlci00NDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTEgMTM6MDg6NTksMDYwIFtXb3JrZXItNDQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTExIDE0OjUyOjE3LDEzNSBbV29ya2VyLTQ3OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMSAxNDo1MjoxNywxMzUgW1dvcmtlci00Nzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTEgMTU6MDA6MzQsODI3IFtXb3JrZXItNDgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTExIDE1OjAwOjM0LDgyOCBbV29ya2VyLTQ4MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMiAxMToyODowMSw4MzUgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAxOS0xMi0xMiAxMTozMToyNSw4NzUgW1dvcmtlci0xNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDE5LTEyLTEyIDExOjUxOjU1LDM1OCBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDExOjUxOjU1LDM2MCBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDExOjU4OjEyLDU2MyBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDExOjU4OjEyLDU2MyBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDEyOjM0OjExLDgzNCBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDEyOjM0OjExLDgzNSBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDEyOjM4OjM1LDE5NCBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDEyOjM4OjM1LDE5NCBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDEyOjQzOjI3LDIwNCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDEyOjQzOjI3LDIwNCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE0OjIwOjQ2LDQyMyBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE0OjIwOjQ2LDQyMyBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE0OjM1OjE2LDE3MiBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE0OjM1OjE2LDE3MyBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE0OjM4OjM1LDQzNiBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE0OjM4OjM1LDQzNiBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE1OjExOjU4LDAwOSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE1OjExOjU4LDAxMCBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE1OjIxOjA1LDA0MCBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE1OjIxOjA1LDA0MCBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE1OjIyOjA3LDQzNyBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE1OjIyOjA3LDQzOCBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE1OjIzOjM5LDc1NSBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE1OjIzOjM5LDc1NSBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE1OjI3OjMzLDEwNCBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE1OjI3OjMzLDEwNSBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEyIDE1OjMxOjA2LDIyMiBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEyIDE1OjMxOjA2LDIyMiBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDA5OjE2OjU0LDQwMiBbV29ya2VyLTM3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAwOToxNjo1NCw0MDIgW1dvcmtlci0zNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMDk6NDE6MzMsNDc2IFtXb3JrZXItMzg4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDA5OjQxOjMzLDQ3NiBbV29ya2VyLTM4ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAwOTo0NjowNiw3NDcgW1dvcmtlci0zOTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMDk6NDY6MDYsNzQ3IFtXb3JrZXItMzkyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDA5OjUzOjA4LDYzMCBbV29ya2VyLTM5OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAwOTo1MzowOCw2MzAgW1dvcmtlci0zOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMDk6NTY6NDMsMjU4IFtXb3JrZXItMzk5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDA5OjU2OjQzLDI1OSBbV29ya2VyLTM5OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAxMDowNTo1Nyw4MjAgW1dvcmtlci00MDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMTA6MDU6NTcsODIwIFtXb3JrZXItNDA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDEwOjA4OjE1LDQ3MiBbV29ya2VyLTQwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAxMDowODoxNSw0NzMgW1dvcmtlci00MDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMTE6MjU6NTUsOTg1IFtXb3JrZXItNDE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDExOjI1OjU1LDk4NSBbV29ya2VyLTQxOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAxNTozNzoxNiwzNDEgW1dvcmtlci00NTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMTU6Mzc6MTYsMzQyIFtXb3JrZXItNDU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTEzIDE2OjIzOjAzLDg4NiBbV29ya2VyLTQ4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xMyAxNjoyMzowMyw4ODYgW1dvcmtlci00ODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTMgMTY6MjY6MDMsODY0IFtXb3JrZXItNDgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTEzIDE2OjI2OjAzLDg2NCBbV29ya2VyLTQ4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xMyAxNjoyNzozMyw2MTkgW1dvcmtlci00ODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTMgMTY6Mjc6MzMsNjE5IFtXb3JrZXItNDg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE3IDA5OjM5OjEwLDg1NiBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDE5LTEyLTE3IDA5OjQ0OjAwLDYzMyBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE3IDA5OjQ0OjAwLDYzNSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE3IDA5OjUzOjQ0LDM0NSBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE3IDA5OjUzOjQ0LDM0NSBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE3IDExOjM4OjEzLDI0MiBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE3IDExOjM4OjEzLDI0MyBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE3IDExOjQ2OjA3LDU3MSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE3IDExOjQ2OjA3LDU3MSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE3IDExOjQ4OjQ0LDE4NiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE3IDExOjQ4OjQ0LDE4NiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE3IDEyOjA1OjAxLDc5OSBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE3IDEyOjA1OjAxLDgwMCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE4IDA5OjQyOjMzLDY3MiBbV29ya2VyLTMzMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOCAwOTo0MjozMyw2NzMgW1dvcmtlci0zMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6MDM6MTMsNjIzIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMTktMTItMTkgMDk6MTI6NDQsNDcxIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6MTI6NDQsNDc0IFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6MjA6MTUsMzg1IFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6MjA6MTUsMzg2IFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6MjQ6MTksMTExIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6MjQ6MTksMTExIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6MzI6MTMsMzc1IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6MzI6MTMsMzc1IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6MzU6MDgsMDkyIFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMDk6MzU6MDgsMDkyIFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMDk6MzY6NDksNDE5IFtXb3JrZXItMzQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAxOS0xMi0xOSAwOTo0MzowNSw1MDcgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAwOTo0MzowNSw1MDcgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAwOTo1NDozOCwxOTEgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAwOTo1NDozOCwxOTIgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAwOTo1OTo0MCw2ODEgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAwOTo1OTo0MCw2ODEgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNDo0Nzo0NywzNDUgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNDo0Nzo0NywzNDUgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNDo0OToxMCwyNzMgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNDo0OToxMCwyNzQgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNDo1MDoyMCwyNTYgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNDo1MDoyMCwyNTYgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNDo1MzowMiw5NTYgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNDo1MzowMiw5NTYgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNToyNzoxMSwxMzEgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNToyNzoxMSwxMzEgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNTozNzo1MCwxOTUgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNTozNzo1MCwxOTYgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNTo0MjowNCwwMzggW1dvcmtlci04MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNTo0MjowNCwwMzggW1dvcmtlci04MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNTo1MDo0Niw5ODggW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNTo1MDo0Niw5ODggW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNTo1MjowOCwzNTIgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNTo1MjowOCwzNTMgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNTo1NTowMiw5OTkgW1dvcmtlci05MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNTo1NTowMiw5OTkgW1dvcmtlci05MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNjoyMDowOSw4NzkgW1dvcmtlci05MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNjoyMDowOSw4ODAgW1dvcmtlci05MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNjoyNDo0OCw2NTcgW1dvcmtlci05OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNjoyNDo0OCw2NTggW1dvcmtlci05OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNjozMDoxOCwyOTIgW1dvcmtlci0xMDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTY6MzA6MTgsMjkzIFtXb3JrZXItMTAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDE5LTEyLTE5IDE2OjMyOjI4LDA4MCBbV29ya2VyLTEwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAxOS0xMi0xOSAxNjozMjoyOCwwODEgW1dvcmtlci0xMDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMTktMTItMTkgMTY6NDk6MzMsNDE1IFtXb3JrZXItMTA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDE5LTEyLTE5IDE2OjQ5OjMzLDQxNSBbV29ya2VyLTEwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAxOS0xMi0xOSAxNjo1MDozMyw1MTkgW1dvcmtlci0xMDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMTktMTItMTkgMTY6NTA6MzMsNTE5IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA4IDA5OjA5OjIyLDk5NSBbV29ya2VyLTM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAxLTA4IDE0OjE0OjQ5LDI3MSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE0OjE0OjQ5LDI3MSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA4IDE0OjUyOjQ2LDE5MSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA4IDE0OjUyOjQ2LDE5MSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA4IDE0OjU1OjI5LDM3MCBbV29ya2VyLTk0OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHBvbS54bWwuCisyMDIwLTAxLTA4IDE0OjU1OjMxLDEyMCBbV29ya2VyLTk0OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTQ6NTU6MzIsMDI2IFtXb3JrZXItOTk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTA4IDE0OjU1OjMyLDAyNiBbV29ya2VyLTk5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wMS0wOCAxNDo1NTozMiwwNDIgW1dvcmtlci05OTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDEtMDggMTQ6NTU6MzIsMDQyIFtXb3JrZXItOTk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTAxLTA4IDE0OjU1OjMyLDA0MiBbV29ya2VyLTk5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTQ6NTU6MzIsMDQyIFtXb3JrZXItOTk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTQ6NTU6MzIsMTA0IFtXb3JrZXItOTk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTA4IDE0OjU5OjE4LDQyNSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOCAxNDo1OToxOCw0MjUgW1dvcmtlci0xMDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDggMTU6MzM6MjIsNDk0IFtXb3JrZXItMTEwOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTU6MzM6NTUsMjk3IFtXb3JrZXItMTEwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMS0wOCAxNTozMzo1NSwzMTMgW1dvcmtlci0xMTA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTAxLTA4IDE1OjMzOjU1LDMxMyBbV29ya2VyLTExMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDEtMDggMTU6MzM6NTUsMzEzIFtXb3JrZXItMTEwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wMS0wOCAxNTozMzo1NSwzMTMgW1dvcmtlci0xMTA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOCAxNTozMzo1NSwzMTMgW1dvcmtlci0xMTA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDggMTU6MzM6NTUsMzU5IFtXb3JrZXItMTEwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMS0wOSAwODo1NTozOCwyMzAgW1dvcmtlci0zMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMDg6NTU6MzgsMjMwIFtXb3JrZXItMzExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDA5OjEzOjUwLDUwNiBbV29ya2VyLTMxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOSAwOToxMzo1MCw1MDYgW1dvcmtlci0zMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMDk6MTg6MjUsMjI5IFtXb3JrZXItMzE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTA5IDA5OjE4OjI1LDIyOSBbV29ya2VyLTMxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOSAwOTo0NTo0OSw0MzggW1dvcmtlci0zMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMDk6NDU6NDksNDM4IFtXb3JrZXItMzI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTA5IDExOjM5OjIzLDU5OSBbV29ya2VyLTM2MjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAxLTA5IDExOjQ0OjExLDQzOCBbV29ya2VyLTM2MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOSAxMTo0NDoxMSw0MzggW1dvcmtlci0zNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMTE6NTI6NDMsODQ2IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDEtMDkgMTM6NDE6MTYsNjk3IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTM6NDE6MTYsNjk3IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMTQ6MjA6NTEsNTEyIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTQ6MjA6NTEsNTEyIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMTQ6MzA6MjMsNzg1IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMDkgMTQ6MzA6MjMsNzg1IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMDkgMTQ6MzU6MDQsODMwIFtXb3JrZXItNDA6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMS0wOSAxNTowNDoxMCwzNjUgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOSAxNTowNDoxMCwzNjUgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOSAxNTowNjo1MCw3NzIgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOSAxNTowNjo1MCw3NzIgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0wOSAxNToxOTozNCwyNTAgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0wOSAxNToxOTozNCwyNTAgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMCAxMzoyMzo1NCw2MjQgW1dvcmtlci0zNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTAgMTM6MjM6NTQsNjI0IFtXb3JrZXItMzY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEwIDEzOjU4OjE1LDI3NSBbV29ya2VyLTM4MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMCAxMzo1ODoxNSwyNzUgW1dvcmtlci0zODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMDk6NDc6MjEsNDUyIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDEtMTMgMTA6Mzg6MDksMDY5IFtXb3JrZXItMzI6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMS0xMyAxMToxNzo0OCw0NjQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMToxNzo0OCw0NjQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMToyMDoxNCwzMDQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMToyMDoxNCwzMDQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMToyNToxNiw4OTYgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMToyNToxNiw4OTYgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMToyODozOCw1ODggW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMToyODozOCw1ODggW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMTozMDo0MSw0OTIgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMTozMDo0MSw0OTIgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMTo1Njo0MCwwNzQgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMTo1Njo0MCwwNzQgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMjowMTowOCwyODcgW1dvcmtlci02OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMjowMTowOCwyODcgW1dvcmtlci02OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMjowMToyNywxOTkgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMjowMToyNywxOTkgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMjowNTozMyw5MjMgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMjowNTozMyw5MjMgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMjowNjozOCw4OTQgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMjowNjozOCw4OTQgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMzo0Mjo0OCwyNzYgW1dvcmtlci05NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMzo0Mjo0OCwyNzYgW1dvcmtlci05NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMzo0NTowOCwwMTcgW1dvcmtlci04ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMzo0NTowOCwwMTcgW1dvcmtlci04ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxMzo1MzozNSw1MDkgW1dvcmtlci04OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxMzo1MzozNSw1MDkgW1dvcmtlci04OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDowNTozMCw1MzQgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNDowNTozMCw1MzQgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDoxMzoyMCw1MzIgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNDoxMzoyMCw1MzIgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDoxNjozMSwwNTEgW1dvcmtlci0xMDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTQ6MTY6MzEsMDUxIFtXb3JrZXItMTA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDE0OjE3OjQ5LDQxMiBbV29ya2VyLTk2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEzIDE0OjE3OjQ5LDQxMiBbV29ya2VyLTk2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDE0OjE5OjE0LDE3MSBbV29ya2VyLTEwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNDoxOToxNCwxNzEgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTQ6MzA6MDMsOTI4IFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEzIDE0OjMwOjAzLDkyOCBbV29ya2VyLTExNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNDo0MTozNyw4MDQgW1dvcmtlci0xMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTQ6NDE6MzcsODA0IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDE0OjQ5OjMzLDc3MCBbV29ya2VyLTEyMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNDo0OTozMyw3NzAgW1dvcmtlci0xMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTMgMTU6MTI6MjgsODYyIFtXb3JrZXItMTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTEzIDE1OjEyOjI4LDg2MiBbV29ya2VyLTEzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xMyAxNToxNDoyOSw0MjAgW1dvcmtlci0xMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTMgMTU6MTQ6MjksNDIwIFtXb3JrZXItMTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTEzIDE1OjM2OjA0LDU3MCBbV29ya2VyLTEzMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xMyAxNTozNjowNCw1NzAgW1dvcmtlci0xMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTQgMDk6MDQ6NDgsMzE3IFtXb3JrZXItMzM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE0IDA5OjA0OjQ4LDMxNyBbV29ya2VyLTMzOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNCAxMjowODowMiwwOTAgW1dvcmtlci00MjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTQgMTI6MDg6MDIsMDkwIFtXb3JrZXItNDI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE0IDEyOjEwOjA2LDA1OCBbV29ya2VyLTQyMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNCAxMjoxMDowNiwwNTggW1dvcmtlci00MjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTQgMTI6MTQ6MzUsMjMwIFtXb3JrZXItNDMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE0IDEyOjE0OjM1LDIzMCBbV29ya2VyLTQzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNCAxMjoyMjoyNCw4MTQgW1dvcmtlci00Mjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTQgMTI6MjI6MjQsODE0IFtXb3JrZXItNDI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE0IDEyOjMxOjA2LDc1NSBbV29ya2VyLTQzNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNCAxMjozMTowNiw3NTUgW1dvcmtlci00MzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMDk6MDA6MDcsMDQyIFtXb3JrZXItNzYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDA5OjAwOjA3LDA0MiBbV29ya2VyLTc2MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAwOToxMzoyMSw2MjIgW1dvcmtlci03NzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMDk6MTM6MjEsNjIyIFtXb3JrZXItNzcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDA5OjI0OjAzLDk3NSBbV29ya2VyLTc3MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAwOToyNDowMyw5OTEgW1dvcmtlci03NzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMDk6MzA6MzAsOTAwIFtXb3JrZXItNzc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDA5OjMwOjMwLDkwMCBbV29ya2VyLTc3NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAwOTozNTo1OSw3NzQgW1dvcmtlci03Nzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMDk6MzU6NTksNzkwIFtXb3JrZXItNzc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDEwOjAyOjI5LDQ3MyBbV29ya2VyLTc5NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxMDowMjoyOSw0NzMgW1dvcmtlci03OTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTA6MTA6MzYsNDQwIFtXb3JrZXItNzk2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDEwOjEwOjM2LDQ0MCBbV29ya2VyLTc5NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxMDo0MDo0OSwwMjcgW1dvcmtlci04MDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTA6NDA6NDksMDI3IFtXb3JrZXItODA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDEwOjQxOjUxLDU5NiBbV29ya2VyLTgwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxMDo0MTo1MSw1OTYgW1dvcmtlci04MDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTA6NTE6MjcsMjI3IFtXb3JrZXItODEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDEwOjUxOjI3LDIyNyBbV29ya2VyLTgxMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNDozOToxOCw3MzIgW1dvcmtlci04NzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTQ6Mzk6MTgsNzMyIFtXb3JrZXItODcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE1OjAzOjMzLDIyOCBbV29ya2VyLTg4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNTowMzozMywyMjggW1dvcmtlci04ODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTU6MDc6NTIsNDMxIFtXb3JrZXItODc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE1OjA3OjUyLDQzMSBbV29ya2VyLTg3NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNTo1MDo1NSwzNzEgW1dvcmtlci05MTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTU6NTA6NTUsMzcxIFtXb3JrZXItOTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE1OjUzOjAzLDI3MCBbV29ya2VyLTkxODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNTo1MzowMywyNzAgW1dvcmtlci05MTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTY6MDE6MzcsODg3IFtXb3JrZXItOTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE2OjAxOjM3LDg4NyBbV29ya2VyLTkyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNzoxOTo0NCwwNzggW1dvcmtlci05NTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTc6MTk6NDQsMDc4IFtXb3JrZXItOTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE3OjI4OjUwLDY3NCBbV29ya2VyLTk0OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNzoyODo1MCw2NzQgW1dvcmtlci05NDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTc6Mzg6NDUsNzYyIFtXb3JrZXItOTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE3OjM4OjQ1LDc2MiBbV29ya2VyLTk2NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNzo0MDoxMCw3ODMgW1dvcmtlci05NjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTc6NDA6MTAsNzgzIFtXb3JrZXItOTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE3OjQ0OjM2LDc5NCBbV29ya2VyLTk3NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNzo0NDozNiw3OTQgW1dvcmtlci05NzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTc6NDg6MzcsNTM1IFtXb3JrZXItOTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE3OjQ4OjM3LDUzNSBbV29ya2VyLTk3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNSAxNzo1MToxNywyNTcgW1dvcmtlci05NjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTUgMTc6NTE6MTcsMjU3IFtXb3JrZXItOTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE1IDE3OjUzOjU4LDg1MyBbV29ya2VyLTk3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNSAxNzo1Mzo1OCw4NTMgW1dvcmtlci05NzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTUgMTc6NTk6NDAsNjY5IFtXb3JrZXItOTgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE1IDE3OjU5OjQwLDY2OSBbV29ya2VyLTk4MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAwODo0Mjo0NCw1NjAgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMS0xNiAwODo1MjozOCw1NzMgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAwODo1MjozOCw1NzYgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAwODo1NToxMSw3NzMgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAwODo1NToxMSw3NzQgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAwOToyMzoyNCwxNjkgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAwOToyMzoyNCwxNjkgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNiAwOToyODo0MywxMTAgW1dvcmtlci0zNjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAxLTE2IDA5OjM3OjM2LDY3MSBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE2IDA5OjM3OjM2LDY3MSBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE2IDExOjEyOjQzLDkyNiBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE2IDExOjEyOjQzLDkyNiBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE2IDExOjIxOjQ2LDE0OCBbV29ya2VyLTc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE2IDExOjIxOjQ2LDE0OCBbV29ya2VyLTc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE2IDExOjI3OjIwLDg0OSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE2IDExOjI3OjIwLDg0OSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE2IDExOjQzOjIyLDEzOSBbV29ya2VyLTgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE2IDExOjQzOjIyLDEzOSBbV29ya2VyLTgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE2IDEzOjMzOjAyLDczOCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNiAxMzozMzowMiw3MzggW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTcgMDk6Mjk6MTUsMDE5IFtXb3JrZXItMzQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE3IDA5OjI5OjE1LDAxOSBbV29ya2VyLTM0MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNyAwOTozNDoyNCwxMzYgW1dvcmtlci0zNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTcgMDk6MzQ6MjQsMTM2IFtXb3JrZXItMzQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE3IDA5OjQzOjIzLDc4MCBbV29ya2VyLTM1MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNyAwOTo0MzoyMyw3ODAgW1dvcmtlci0zNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTcgMDk6NDk6NDIsNzEwIFtXb3JrZXItMzU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE3IDA5OjQ5OjQyLDcxMCBbV29ya2VyLTM1NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNyAwOTo1MzoxMSwzODMgW1dvcmtlci0zNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTcgMDk6NTM6MTEsMzgzIFtXb3JrZXItMzU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTE3IDExOjUyOjQ0LDAyNCBbV29ya2VyLTM3ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0xNyAxMTo1Mjo0NCwwMjQgW1dvcmtlci0zNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMTcgMTE6NTM6MjUsNjY4IFtXb3JrZXItMzc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTE3IDExOjUzOjI1LDY2OCBbV29ya2VyLTM3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0xNyAxMzozMjo0OCwyNDEgW1dvcmtlci0zOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMTcgMTM6MzI6NDgsMjQxIFtXb3JrZXItMzk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTIwIDA5OjEyOjM4LDE5MCBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAxLTIwIDA5OjI2OjUyLDI4MSBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTAxLTIwIDEwOjA0OjI4LDcwNSBbV29ya2VyLTI0OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDEtMjAgMTA6MDU6MDYsNzkxIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjAgMTA6MDU6MDYsODA2IFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjAgMTA6MTg6MDEsOTY3IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjAgMTA6MTg6MDEsOTY3IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjMgMTE6NTI6MDMsODY1IFtXb3JrZXItMzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDEtMjQgMDg6NTc6MDYsNjIyIFtXb3JrZXItMjM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDA4OjU3OjA2LDYzOCBbV29ya2VyLTIzNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAwOTozMjoxNyw4MjEgW1dvcmtlci0yNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMDk6MzI6MTcsODUyIFtXb3JrZXItMjUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDA5OjMyOjM3LDM1NiBbV29ya2VyLTI1NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAwOTozMjozNywzNTYgW1dvcmtlci0yNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMDk6MzQ6NTYsMjg5IFtXb3JrZXItMjU4OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDEtMjQgMTA6MDE6MzgsMjU3IFtXb3JrZXItMjcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEwOjAxOjM4LDI1NyBbV29ya2VyLTI3MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMDowMzozMSw4MjYgW1dvcmtlci0yNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTA6MDM6MzEsODI2IFtXb3JrZXItMjcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEwOjA0OjQ1LDUyMCBbV29ya2VyLTI3MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMDowNDo0NSw1MjAgW1dvcmtlci0yNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTA6NDg6NDgsNjg1IFtXb3JrZXItMjY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEwOjQ4OjQ4LDY4NSBbV29ya2VyLTI2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMDo1NTo1MiwxNTUgW1dvcmtlci0yODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTA6NTU6NTIsMTU1IFtXb3JrZXItMjg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDExOjAxOjA4LDk4MSBbV29ya2VyLTI5MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMTowMTowOCw5ODEgW1dvcmtlci0yOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTE6MDU6MjEsMzQ1IFtXb3JrZXItMjY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDExOjA1OjIxLDM0NSBbV29ya2VyLTI2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMToxNzo0MCw3NTIgW1dvcmtlci0zMDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTE6MTc6NDAsNzUyIFtXb3JrZXItMzA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDExOjE5OjQzLDk1OCBbV29ya2VyLTMwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMToxOTo0Myw5NTggW1dvcmtlci0zMDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTE6MjI6MDAsMDg3IFtXb3JrZXItMzA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDExOjIyOjAwLDA4NyBbV29ya2VyLTMwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMToyMzowOCw3ODMgW1dvcmtlci0zMDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTE6MjM6MDgsNzgzIFtXb3JrZXItMzAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDExOjM2OjU3LDc2NCBbV29ya2VyLTMwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMTozNjo1Nyw3NjQgW1dvcmtlci0zMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTI6MTg6MTcsOTIxIFtXb3JrZXItMzE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEyOjE4OjE3LDkyMSBbV29ya2VyLTMxODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMzowODo1OSw4MDkgW1dvcmtlci0zMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTM6MDg6NTksODI1IFtXb3JrZXItMzMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEzOjExOjA5LDk2NyBbV29ya2VyLTMzNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMzoxMTowOSw5NjcgW1dvcmtlci0zMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTM6MjA6NDIsODc1IFtXb3JrZXItMzQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEzOjIwOjQyLDg3NSBbV29ya2VyLTM0MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxMzoyNzoyNyw3MTMgW1dvcmtlci0zNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTM6Mjc6MjcsNzEzIFtXb3JrZXItMzQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDEzOjI5OjAxLDM3NSBbV29ya2VyLTM0NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxMzoyOTowMSwzNzUgW1dvcmtlci0zNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTM6NDQ6MTQsNjI5IFtXb3JrZXItMzUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDEzOjQ0OjE0LDYyOSBbV29ya2VyLTM1MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxNDowMDoxMyw3ODUgW1dvcmtlci0zNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6MDA6MTMsNzg1IFtXb3JrZXItMzU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDE0OjAzOjU2LDQwMCBbV29ya2VyLTM2NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDowMzo1Niw0MDAgW1dvcmtlci0zNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTQ6MDU6MTksMjEwIFtXb3JrZXItMzY4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHBvbS54bWwuCisyMDIwLTAxLTI0IDE0OjA1OjIxLDEwMSBbV29ya2VyLTM2ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjA1OjIyLDEwMSBbV29ya2VyLTM2NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDEtMjQgMTQ6MDU6MjIsMTAxIFtXb3JrZXItMzY0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wMS0yNCAxNDowNToyMiwxMDEgW1dvcmtlci0zNjQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAxLTI0IDE0OjA1OjIyLDEwMSBbV29ya2VyLTM2NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDEtMjQgMTQ6MDU6MjIsMTAxIFtXb3JrZXItMzY0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6MDU6MjIsMTAxIFtXb3JrZXItMzY0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjA1OjIyLDE3OSBbV29ya2VyLTM2NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDEtMjQgMTQ6MDU6MzIsMTAwIFtXb3JrZXItMzcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjA1OjMyLDEwMCBbV29ya2VyLTM3MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxNDowNzozMSw4NjcgW1dvcmtlci0zNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6MDc6MzEsODY3IFtXb3JrZXItMzc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDE0OjE1OjA2LDAyOCBbV29ya2VyLTM3ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDoxNTowNiwwMjggW1dvcmtlci0zNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTQ6MTc6NTgsNTA4IFtXb3JrZXItMzg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjE3OjU4LDUwOCBbV29ya2VyLTM4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNCAxNDozOTozNSw3MzAgW1dvcmtlci0zOTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjQgMTQ6Mzk6MzUsNzMwIFtXb3JrZXItMzkyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI0IDE0OjQxOjQwLDEwMiBbV29ya2VyLTM4MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNCAxNDo0MTo0MCwxMDIgW1dvcmtlci0zODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjQgMTQ6NTE6NTMsMDM2IFtXb3JrZXItMzk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI0IDE0OjUxOjUzLDAzNiBbV29ya2VyLTM5NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNyAxMTowMTowOCw5ODkgW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMS0yNyAxNDowNzo0NSw2OTcgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNyAxNDowNzo0NSw2OTcgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNyAxNDo1NTo0Niw1MTcgW1dvcmtlci03OTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAxLTI3IDE1OjUwOjE3LDc3NiBbV29ya2VyLTExMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yNyAxNTo1MDoxNyw3NzYgW1dvcmtlci0xMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMjcgMTU6NTU6MDMsMjYzIFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTI3IDE1OjU1OjAzLDI2MyBbV29ya2VyLTExOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0yNyAxNjo0ODo0NSw5MjUgW1dvcmtlci0xMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMjcgMTY6NDg6NDUsOTI1IFtXb3JrZXItMTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTI4IDA5OjM2OjMxLDY0NiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTAxLTI4IDA5OjU2OjU4LDY2MyBbV29ya2VyLTU6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMS0yOCAxMjowMzowOSwzNDUgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0yOCAxMjowMzowOSwzNDUgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAwODozOTozMSw2MjIgW1dvcmtlci00OTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMDg6Mzk6MzEsNjIyIFtXb3JrZXItNDkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMwIDA5OjE0OjEzLDUzNyBbV29ya2VyLTUxMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMCAwOToxNDoxMyw1MzcgW1dvcmtlci01MTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMDk6MjQ6MDMsNTE2IFtXb3JrZXItNTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDA5OjI0OjAzLDUxNiBbV29ya2VyLTUyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAxMDo0MjozNSw4MDEgW1dvcmtlci01MzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMTA6NDI6MzUsODAxIFtXb3JrZXItNTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMwIDEwOjU5OjU4LDI0MiBbV29ya2VyLTU0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMCAxMDo1OTo1OCwyNDIgW1dvcmtlci01NDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMTM6MzI6MDAsMjM0IFtXb3JrZXItNTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDEzOjMyOjAwLDIzNCBbV29ya2VyLTU3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAxMzozODo0NywyMjcgW1dvcmtlci01NzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMTM6Mzg6NDcsMjI3IFtXb3JrZXItNTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMwIDEzOjQxOjM0LDk3MyBbV29ya2VyLTU4MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMCAxMzo0MTozNCw5NzMgW1dvcmtlci01ODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzAgMTM6NDM6MzksNTYzIFtXb3JrZXItNTgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMwIDEzOjQzOjM5LDU2MyBbV29ya2VyLTU4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMS0zMCAxMzo0NzoyOSwzNjQgW1dvcmtlci01ODU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDEtMzAgMTM6NDc6MjksMzY0IFtXb3JrZXItNTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAxLTMxIDA5OjUzOjEwLDk1NCBbV29ya2VyLTgwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMS0zMSAwOTo1MzoxMCw5NTQgW1dvcmtlci04MDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDEtMzEgMTA6MDM6MzYsMDQ0IFtXb3JrZXItODEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAxLTMxIDEwOjAzOjM2LDA0NCBbV29ya2VyLTgxMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xMSAxMTowNjo0NCwyNzcgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMi0xMSAxMToyNjo0Nyw3MjMgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xMSAxMToyNjo0Nyw3MjMgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xMSAxMTo0MDoxNCwyODQgW1dvcmtlci0zNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTAyLTExIDExOjQ1OjM5LDYwMyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTExIDExOjQ1OjM5LDYwMyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTExIDExOjQ3OjQ4LDg1MCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTExIDExOjQ3OjQ4LDg1MCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE0IDE0OjE4OjU1LDc4NiBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAyLTE3IDA5OjMwOjI1LDU2MiBbV29ya2VyLTM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAyLTE3IDA5OjQ0OjIwLDM5OCBbV29ya2VyLTIzOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDItMTcgMDk6NDU6MTYsODU4IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMDk6NDU6MTYsODU5IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTA6MDE6MjgsNDkzIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTA6MDE6MjgsNDkzIFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTA6Mzc6MzQsNDI5IFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTA6Mzc6MzQsNDI5IFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTE6MDY6MDcsNTcyIFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTE6MDY6MDcsNTcyIFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTM6NDc6MzksNzgwIFtXb3JrZXItOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTM6NDc6MzksNzgwIFtXb3JrZXItOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTQ6MDM6MzgsODUzIFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDItMTcgMTQ6MTY6NTQsMzE4IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTcgMTQ6MTY6NTQsMzIwIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTcgMTQ6MjA6MTksNzgzIFtXb3JrZXItMjM6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMi0xNyAxNDoyNjoxNCw0MjMgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xNyAxNDoyNjoxNCw0MjMgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xNyAxNTozMzo1NCwxMjcgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xNyAxNTozMzo1NCwxMjcgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xNyAxNTozNTo0MCw2NzIgW1dvcmtlci00NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xNyAxNTozNTo0MCw2NzIgW1dvcmtlci00NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xOCAxMjoxMjowMSw0MjMgW1dvcmtlci0yMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTggMTI6MTI6MDEsNDIzIFtXb3JrZXItMjE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE4IDEyOjE0OjM1LDY2OCBbV29ya2VyLTIwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xOCAxMjoxNDozNSw2NjggW1dvcmtlci0yMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMTggMTI6MTk6NTIsMjg5IFtXb3JrZXItMjE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTE4IDEyOjE5OjUyLDI4OSBbV29ya2VyLTIxNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0xOCAxMjoyNToyOSwwNDIgW1dvcmtlci0yMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMTggMTI6MjU6MjksMDQyIFtXb3JrZXItMjIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTE4IDEyOjM1OjQ5LDY2MSBbV29ya2VyLTIyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0xOCAxMjozNTo0OSw2NjEgW1dvcmtlci0yMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTE6NDY6NTYsMTE2IFtXb3JrZXItNzE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDExOjQ2OjU2LDExNiBbV29ya2VyLTcxNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxMjowMzozOCw2NDcgW1dvcmtlci03MTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTI6MDM6MzgsNjQ3IFtXb3JrZXItNzE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDEyOjA4OjUxLDE4MiBbV29ya2VyLTczMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxMjowODo1MSwxODIgW1dvcmtlci03MzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTI6MTk6MzYsMDE1IFtXb3JrZXItNzM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDEyOjE5OjM2LDAxNSBbV29ya2VyLTczNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxMjoyMjozMSw2OTkgW1dvcmtlci03MzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTI6MjI6MzEsNjk5IFtXb3JrZXItNzMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDE1OjQ2OjAwLDg4MSBbV29ya2VyLTc3NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxNTo0NjowMCw4ODEgW1dvcmtlci03Nzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTU6NDg6MjQsMTE2IFtXb3JrZXItNzc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDE1OjQ4OjI0LDExNiBbV29ya2VyLTc3OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxNTo1Mzo0Myw2OTEgW1dvcmtlci03Nzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTU6NTM6NDMsNjkxIFtXb3JrZXItNzc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDE1OjU0OjAxLDYzMiBbV29ya2VyLTc3OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxNTo1NDowMSw2MzIgW1dvcmtlci03Nzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjAgMTY6MDQ6MDksMTQ5IFtXb3JrZXItNzgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIwIDE2OjA0OjA5LDE0OSBbV29ya2VyLTc4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMCAxNjo0ODoxMywwMzQgW1dvcmtlci03OTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjAgMTY6NDg6MTMsMDM0IFtXb3JrZXItNzk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIwIDE2OjU1OjE0LDY0NCBbV29ya2VyLTgwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMCAxNjo1NToxNCw2NDQgW1dvcmtlci04MDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDItMjEgMTI6NTM6NDksMjI1IFtXb3JrZXItMTA3MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMSAxMjo1Mzo0OSwyNzkgW1dvcmtlci0xMDcxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIxIDEzOjAwOjE1LDM2OCBbV29ya2VyLTEwNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjEgMTM6MDA6MTUsMzY4IFtXb3JrZXItMTA3MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMi0yMSAxMzowNzoyMSw4OTIgW1dvcmtlci0xMDc3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgRjpcRGF0ZW5cd3NwLUtvckFQLVNlcnZpY2VzXEdsZW1tU2VydmljZXMyXHBvbS54bWwuCisyMDIwLTAyLTIxIDEzOjA3OjI0LDExNiBbV29ya2VyLTEwNzc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMSAxMzowNzoyNSwwNTkgW1dvcmtlci0xMDY5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tY29yZS8yLjkuNi9qYWNrc29uLWNvcmUtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDItMjEgMTM6MDc6MjUsNTMzIFtXb3JrZXItMTA2OTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tY29yZS8yLjkuNi9qYWNrc29uLWNvcmUtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDItMjEgMTM6MDc6MjUsNTc0IFtXb3JrZXItMTA3ODogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDItMjEgMTM6MDc6MjUsNTgyIFtXb3JrZXItMTA3ODogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDItMjEgMTM6MDc6MjUsNTg0IFtXb3JrZXItMTA3ODogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDItMjEgMTM6MDc6MjUsNTg0IFtXb3JrZXItMTA3ODogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMlxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDItMjEgMTM6MDc6MjUsNTg0IFtXb3JrZXItMTA3ODogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTAyLTIxIDEzOjA3OjI1LDU4NCBbV29ya2VyLTEwNzg6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjEgMTM6MDc6MjUsNjYyIFtXb3JrZXItMTA3ODogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDItMjEgMTM6MDc6MjYsMjU2IFtXb3JrZXItMTA2OTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlOmphY2tzb24tY29yZToyLjkuNgorMjAyMC0wMi0yMSAxMzowNzoyNiwzMjYgW1dvcmtlci0xMDY5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tYW5ub3RhdGlvbnMvMi45LjYvamFja3Nvbi1hbm5vdGF0aW9ucy0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMi0yMSAxMzowNzoyNiw0NzkgW1dvcmtlci0xMDY5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1hbm5vdGF0aW9ucy8yLjkuNi9qYWNrc29uLWFubm90YXRpb25zLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAyLTIxIDEzOjA3OjI2LDU3MCBbV29ya2VyLTEwNjk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWFubm90YXRpb25zOjIuOS42CisyMDIwLTAyLTIxIDEzOjA3OjI2LDU4OCBbV29ya2VyLTEwNjk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1kYXRhYmluZC8yLjkuNi9qYWNrc29uLWRhdGFiaW5kLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAyLTIxIDEzOjA3OjI2LDk4MSBbV29ya2VyLTEwNjk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWRhdGFiaW5kLzIuOS42L2phY2tzb24tZGF0YWJpbmQtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDItMjEgMTM6MDc6MjcsMDYzIFtXb3JrZXItMTA2OTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlOmphY2tzb24tZGF0YWJpbmQ6Mi45LjYKKzIwMjAtMDItMjEgMTQ6MTY6MDgsMzY4IFtXb3JrZXItMTA5NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMi0yMSAxNDoxNjowOCwzODQgW1dvcmtlci0xMDk0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gRl9fRGF0ZW5fd3NwLUtvckFQLVNlcnZpY2VzX0dsZW1tU2VydmljZXMyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAyLTIxIDE0OjIxOjE1LDA4NyBbV29ya2VyLTEwOTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBGX19EYXRlbl93c3AtS29yQVAtU2VydmljZXNfR2xlbW1TZXJ2aWNlczJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDItMjEgMTQ6MjE6MTUsMDg3IFtXb3JrZXItMTA5MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0wMyAxMTo1Nzo0NSwzMTMgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wMy0wMyAxMjoxMDo1Miw3OTMgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0wMyAxMjoxMDo1Miw3OTQgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0wMyAxMjoyNTowNSwzMzQgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0wMyAxMjoyNTowNSwzMzUgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIEZfX0RhdGVuX3dzcC1Lb3JBUC1TZXJ2aWNlc19HbGVtbVNlcnZpY2VzMl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0yNiAxOToxNDowMSw1OTAgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG5vdCBhdmFpbGFibGUuIFJlbW90ZSBkb3dubG9hZCByZXF1aXJlZC4KKzIwMjAtMDMtMjYgMTk6MTk6MjEsMDA3IFtXb3JrZXItNjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDMtMjYgMTk6MjQ6MjIsODg5IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTI2IDE5OjI0OjIyLDk1MSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMwIDA5OjQyOjUwLDA5NCBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgbm90IGF2YWlsYWJsZS4gUmVtb3RlIGRvd25sb2FkIHJlcXVpcmVkLgorMjAyMC0wMy0zMCAxMToyMTozMSw5NDAgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMwIDExOjIxOjMxLDk1MiBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMCAxMTo0MToxOCw4MDMgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wMy0zMCAxNTo1OToyMCwwMTEgW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wMy0zMCAxNjowNDozNiwwNjcgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDMtMzAgMTY6MDQ6MzYsMDgxIFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzAgMTc6NTc6NDQsNTg2IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1jbGVhbi1wbHVnaW4vMi41L21hdmVuLWNsZWFuLXBsdWdpbi0yLjUuamFyCisyMDIwLTAzLTMwIDE3OjU3OjQ1LDEyOCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1jbGVhbi1wbHVnaW4vMi41L21hdmVuLWNsZWFuLXBsdWdpbi0yLjUuamFyCisyMDIwLTAzLTMwIDE3OjU3OjQ3LDE5NSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tZGVwbG95LXBsdWdpbi8yLjcvbWF2ZW4tZGVwbG95LXBsdWdpbi0yLjcuamFyCisyMDIwLTAzLTMwIDE3OjU3OjQ3LDMyNyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1kZXBsb3ktcGx1Z2luLzIuNy9tYXZlbi1kZXBsb3ktcGx1Z2luLTIuNy5qYXIKKzIwMjAtMDMtMzAgMTc6NTc6NDcsNTQ2IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1zaXRlLXBsdWdpbi8zLjMvbWF2ZW4tc2l0ZS1wbHVnaW4tMy4zLmphcgorMjAyMC0wMy0zMCAxNzo1Nzo0Nyw4NDQgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tc2l0ZS1wbHVnaW4vMy4zL21hdmVuLXNpdGUtcGx1Z2luLTMuMy5qYXIKKzIwMjAtMDMtMzAgMTc6NTc6NTIsODA4IFttYWluXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDMtMzAgMTg6Mzg6MzgsMTI3IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMCAxODozODozOCwzMTIgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzAgMTg6NDI6NDgsNDkzIFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDMtMzAgMTg6NDU6MzgsNTY1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDMtMzAgMTg6NDU6MzksNjA5IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTozOSw2NzYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6MzksNzMzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbnRhaW5lcnMvMS43LjEvcGxleHVzLWNvbnRhaW5lcnMtMS43LjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjM5LDgxMiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbnRhaW5lcnMvMS43LjEvcGxleHVzLWNvbnRhaW5lcnMtMS43LjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjM5LDk2MCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzMuMi4wL21hdmVuLWFyY2hpdmVyLTMuMi4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCwwMTAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzMuMi4wL21hdmVuLWFyY2hpdmVyLTMuMi4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCwwOTcgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4wL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsMTY1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLXV0aWxzLzMuMi4wL21hdmVuLXNoYXJlZC11dGlscy0zLjIuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsMzIzIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNS9wbGV4dXMtYXJjaGl2ZXItMy41LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCwzODkgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjUvcGxleHVzLWFyY2hpdmVyLTMuNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsNDQxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLzUuMC9wbGV4dXMtNS4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCw1MjcgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy81LjAvcGxleHVzLTUuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsNTkyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMC4yNC9wbGV4dXMtdXRpbHMtMy4wLjI0LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCw2NDMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAuMjQvcGxleHVzLXV0aWxzLTMuMC4yNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsNjk0IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4wL3BsZXh1cy1pby0zLjAuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDAsODAwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjAvcGxleHVzLWlvLTMuMC4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCw4NTMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNC9jb21tb25zLWNvbXByZXNzLTEuMTQucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQwLDkwNSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMTQvY29tbW9ucy1jb21wcmVzcy0xLjE0LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MCw5NzEgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtcGFyZW50LzQyL2NvbW1vbnMtcGFyZW50LTQyLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSwxNzIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1wYXJlbnQvNDIvY29tbW9ucy1wYXJlbnQtNDIucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDI1MiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvaXE4MC9zbmFwcHkvc25hcHB5LzAuNC9zbmFwcHktMC40LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSwzMDAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvaXE4MC9zbmFwcHkvc25hcHB5LzAuNC9zbmFwcHktMC40LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSwzODggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS42L3h6LTEuNi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsNDYwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS42L3h6LTEuNi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsNTExIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yMi9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjIyLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MSw2MjggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjIvcGxleHVzLWludGVycG9sYXRpb24tMS4yMi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsNzAxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudHMvMS4zLjEvcGxleHVzLWNvbXBvbmVudHMtMS4zLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDc1MyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudHMvMS4zLjEvcGxleHVzLWNvbXBvbmVudHMtMS4zLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDgyMCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjYuMC9wbGV4dXMtYXJjaGl2ZXItMy42LjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQxLDkwNyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNi4wL3BsZXh1cy1hcmNoaXZlci0zLjYuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDEsOTU4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMS4wL3BsZXh1cy11dGlscy0zLjEuMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsMDA3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MiwwNjUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjEvcGxleHVzLWlvLTMuMC4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MiwxMTggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8zLjAuMS9wbGV4dXMtaW8tMy4wLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQyLDE3MyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi42L2NvbW1vbnMtaW8tMi42LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MiwyMjMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi42L2NvbW1vbnMtaW8tMi42LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MiwzMDkgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNi4xL2NvbW1vbnMtY29tcHJlc3MtMS4xNi4xLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MiwzNjggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE2LjEvY29tbW9ucy1jb21wcmVzcy0xLjE2LjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQyLDQ0OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1wYXJlbnQvNDMvY29tbW9ucy1wYXJlbnQtNDMucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQyLDcwMSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLXBhcmVudC80My9jb21tb25zLXBhcmVudC00My5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDIsODUwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLzIuNi9vYmplbmVzaXMtMi42LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Miw5MTkgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy8yLjYvb2JqZW5lc2lzLTIuNi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDMsMDQxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLXBhcmVudC8yLjYvb2JqZW5lc2lzLXBhcmVudC0yLjYucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQzLDIzMiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9vYmplbmVzaXMvb2JqZW5lc2lzLXBhcmVudC8yLjYvb2JqZW5lc2lzLXBhcmVudC0yLjYucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQzLDI5NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvdHVrYWFuaS94ei8xLjgveHotMS44LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0MywzNDggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvdHVrYWFuaS94ei8xLjgveHotMS44LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Myw0MTUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQzLDUzMCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Myw2MzggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS40LjEwL3hzdHJlYW0tMS40LjEwLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Myw3MzggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjQuMTAveHN0cmVhbS0xLjQuMTAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQzLDg1NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS1wYXJlbnQvMS40LjEwL3hzdHJlYW0tcGFyZW50LTEuNC4xMC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDMsOTQyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0tcGFyZW50LzEuNC4xMC94c3RyZWFtLXBhcmVudC0xLjQuMTAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDA2NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi94bWxwdWxsL3htbHB1bGwvMS4xLjMuMS94bWxwdWxsLTEuMS4zLjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDExMyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL3htbHB1bGwveG1scHVsbC8xLjEuMy4xL3htbHB1bGwtMS4xLjMuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsMjUwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL3hwcDMveHBwM19taW4vMS4xLjRjL3hwcDNfbWluLTEuMS40Yy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsMzA1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIveHBwMy94cHAzX21pbi8xLjEuNGMveHBwM19taW4tMS4xLjRjLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NCwzODEgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzMuMS4xL21hdmVuLWZpbHRlcmluZy0zLjEuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsNDQ1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzMuMS4xL21hdmVuLWZpbHRlcmluZy0zLjEuMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsNTcxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjAuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4wLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDY0NCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjAuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4wLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDcxNCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy8yMS9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy0yMS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsNzY3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMvMjEvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMtMjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDgyMCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC8yNS9tYXZlbi1wYXJlbnQtMjUucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ0LDg3OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcGFyZW50LzI1L21hdmVuLXBhcmVudC0yNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDQsOTU3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvYXBhY2hlLzE1L2FwYWNoZS0xNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsMDg3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9hcGFjaGUvMTUvYXBhY2hlLTE1LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NSwxNTUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNC9jb21tb25zLWlvLTIuNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsMjA3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNC9jb21tb25zLWlvLTIuNC5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsMjU3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLXBhcmVudC8yNS9jb21tb25zLXBhcmVudC0yNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsMzk2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtcGFyZW50LzI1L2NvbW1vbnMtcGFyZW50LTI1LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NSw0OTIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9hcGFjaGUvOS9hcGFjaGUtOS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsNTg3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9hcGFjaGUvOS9hcGFjaGUtOS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsNjQ1IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLWJ1aWxkLWFwaS8wLjAuNy9wbGV4dXMtYnVpbGQtYXBpLTAuMC43LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NSw3MjYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1idWlsZC1hcGkvMC4wLjcvcGxleHVzLWJ1aWxkLWFwaS0wLjAuNy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsODA2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9zcGljZS9zcGljZS1wYXJlbnQvMTUvc3BpY2UtcGFyZW50LTE1LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NSw4NzMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvc3BpY2Uvc3BpY2UtcGFyZW50LzE1L3NwaWNlLXBhcmVudC0xNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDUsOTgxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9mb3JnZS9mb3JnZS1wYXJlbnQvNS9mb3JnZS1wYXJlbnQtNS5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsMDQ4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL2ZvcmdlL2ZvcmdlLXBhcmVudC81L2ZvcmdlLXBhcmVudC01LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NiwxNTAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tbWFwcGluZy8zLjAuMC9tYXZlbi1tYXBwaW5nLTMuMC4wLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0NiwyNDYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1tYXBwaW5nLzMuMC4wL21hdmVuLW1hcHBpbmctMy4wLjAucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDMwOSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy8yMi9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy0yMi5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsNDExIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMvMjIvbWF2ZW4tc2hhcmVkLWNvbXBvbmVudHMtMjIucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDQ3NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC8yNy9tYXZlbi1wYXJlbnQtMjcucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDU0MSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcGFyZW50LzI3L21hdmVuLXBhcmVudC0yNy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsNTk2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvYXBhY2hlLzE3L2FwYWNoZS0xNy5wb20KKzIwMjAtMDMtMzAgMTg6NDU6NDYsNjYxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9hcGFjaGUvMTcvYXBhY2hlLTE3LnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Niw3MjIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjIxL3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjEucG9tCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDc4NyBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yMS9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjIxLnBvbQorMjAyMC0wMy0zMCAxODo0NTo0Niw5MTIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLzEuNy4xL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMtMS43LjEuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ2LDk5NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy8xLjcuMS9wbGV4dXMtY29tcG9uZW50LWFubm90YXRpb25zLTEuNy4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0NywwMzggW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDcsNDU5IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hcmNoaXZlci8zLjIuMC9tYXZlbi1hcmNoaXZlci0zLjIuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDcsNDkxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDYwNSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMC9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDY0NSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8zLjYuMC9wbGV4dXMtYXJjaGl2ZXItMy42LjAuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ3LDc2OCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzMuNi4wL3BsZXh1cy1hcmNoaXZlci0zLjYuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDcsODA3IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzMuMC4xL3BsZXh1cy1pby0zLjAuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDcsOTMwIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMy4wLjEvcGxleHVzLWlvLTMuMC4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0Nyw5NzAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4xNi4xL2NvbW1vbnMtY29tcHJlc3MtMS4xNi4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OCwyMTIgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE2LjEvY29tbW9ucy1jb21wcmVzcy0xLjE2LjEuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDI0NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvb2JqZW5lc2lzL29iamVuZXNpcy8yLjYvb2JqZW5lc2lzLTIuNi5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsMzI4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL29iamVuZXNpcy9vYmplbmVzaXMvMi42L29iamVuZXNpcy0yLjYuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ4LDM2NiBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvaXE4MC9zbmFwcHkvc25hcHB5LzAuNC9zbmFwcHktMC40LmphcgorMjAyMC0wMy0zMCAxODo0NTo0OCw0NDUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvaXE4MC9zbmFwcHkvc25hcHB5LzAuNC9zbmFwcHktMC40LmphcgorMjAyMC0wMy0zMCAxODo0NTo0OCw0ODYgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsNTcxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3R1a2FhbmkveHovMS44L3h6LTEuOC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsNjA5IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4yNC9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjI0LmphcgorMjAyMC0wMy0zMCAxODo0NTo0OCw3MDEgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pbnRlcnBvbGF0aW9uLzEuMjQvcGxleHVzLWludGVycG9sYXRpb24tMS4yNC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsNzQxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS90aG91Z2h0d29ya3MveHN0cmVhbS94c3RyZWFtLzEuNC4xMC94c3RyZWFtLTEuNC4xMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDgsOTk4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS40LjEwL3hzdHJlYW0tMS40LjEwLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OSwwMzMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIveG1scHVsbC94bWxwdWxsLzEuMS4zLjEveG1scHVsbC0xLjEuMy4xLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OSwxMzUgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi94bWxwdWxsL3htbHB1bGwvMS4xLjMuMS94bWxwdWxsLTEuMS4zLjEuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDE2OSBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi94cHAzL3hwcDNfbWluLzEuMS40Yy94cHAzX21pbi0xLjEuNGMuamFyCisyMDIwLTAzLTMwIDE4OjQ1OjQ5LDI4NCBbV29ya2VyLTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL3hwcDMveHBwM19taW4vMS4xLjRjL3hwcDNfbWluLTEuMS40Yy5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksMzMyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMS4wL3BsZXh1cy11dGlscy0zLjEuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksNDgyIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtdXRpbHMvMy4xLjAvcGxleHVzLXV0aWxzLTMuMS4wLmphcgorMjAyMC0wMy0zMCAxODo0NTo0OSw1MjQgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzMuMS4xL21hdmVuLWZpbHRlcmluZy0zLjEuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksNTk4IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzMuMS4xL21hdmVuLWZpbHRlcmluZy0zLjEuMS5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksNjM2IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLWJ1aWxkLWFwaS8wLjAuNy9wbGV4dXMtYnVpbGQtYXBpLTAuMC43LmphcgorMjAyMC0wMy0zMCAxODo0NTo0OSw3NTAgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1idWlsZC1hcGkvMC4wLjcvcGxleHVzLWJ1aWxkLWFwaS0wLjAuNy5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NDksNzkxIFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLW1hcHBpbmcvMy4wLjAvbWF2ZW4tbWFwcGluZy0zLjAuMC5qYXIKKzIwMjAtMDMtMzAgMTg6NDU6NTAsMDU0IFtXb3JrZXItMzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tbWFwcGluZy8zLjAuMC9tYXZlbi1tYXBwaW5nLTMuMC4wLmphcgorMjAyMC0wMy0zMCAxODo0NTo1Nyw4ODMgW1dvcmtlci0zOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMzAgMTg6NDU6NTgsOTk0IFtXb3JrZXItNzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qdW5pdC9qdW5pdC8zLjguMS9qdW5pdC0zLjguMS1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxODo0NTo1OSwxNjQgW1dvcmtlci03OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvanVuaXQvanVuaXQvMy44LjEvanVuaXQtMy44LjEtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTg6NDY6MDAsNzgxIFtXb3JrZXItNzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGp1bml0Omp1bml0OjMuOC4xCisyMDIwLTAzLTMwIDE4OjQ2OjAwLDgyMSBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvamF2YXgvc2VydmxldC9zZXJ2bGV0LWFwaS8yLjUvc2VydmxldC1hcGktMi41LXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE4OjQ2OjAwLDk0OCBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qYXZheC9zZXJ2bGV0L3NlcnZsZXQtYXBpLzIuNS9zZXJ2bGV0LWFwaS0yLjUtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTg6NDY6MDIsMTQ3IFtXb3JrZXItNzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGphdmF4LnNlcnZsZXQ6c2VydmxldC1hcGk6Mi41CisyMDIwLTAzLTMwIDE4OjQ2OjAyLDE5MSBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvamF2YXgvd3MvcnMvamF2YXgud3MucnMtYXBpLzIuMC9qYXZheC53cy5ycy1hcGktMi4wLXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE4OjQ2OjAyLDMzMCBbV29ya2VyLTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9qYXZheC93cy9ycy9qYXZheC53cy5ycy1hcGkvMi4wL2phdmF4LndzLnJzLWFwaS0yLjAtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTg6NDY6MDIsNzMzIFtXb3JrZXItNzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGphdmF4LndzLnJzOmphdmF4LndzLnJzLWFwaToyLjAKKzIwMjAtMDMtMzAgMTg6NDY6MDQsOTkxIFtXb3JrZXItMTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMwIDE4OjQ2OjA1LDAxOCBbV29ya2VyLTEyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDMtMzAgMTg6NDY6MDUsMDIxIFtXb3JrZXItMTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMwIDE4OjQ2OjA1LDAyMyBbV29ya2VyLTEyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDMtMzAgMTg6NDY6MDUsMDI0IFtXb3JrZXItMTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMCAxODo0NjowNSwwMjQgW1dvcmtlci0xMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMCAxODo0NjowNSwwMzAgW1dvcmtlci0xMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIG9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczptYXZlbi1jbGVhbi1wbHVnaW46amFyOjIuNSBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wMy0zMCAxODo0NjowNSwxMDQgW1dvcmtlci0xMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzAgMTg6NTA6NTAsMDUxIFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMwIDE4OjUwOjUwLDA1MSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMwIDE5OjAzOjUxLDk5NCBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wMy0zMCAxOTowNDowMywxMDYgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzAgMTk6MDQ6MDMsNDkwIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wMy0zMCAxOTowNDowMyw1MDMgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzAgMTk6MDQ6MDMsNTUxIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wMy0zMCAxOTowNDowNCwwNTIgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMwIDE5OjA0OjA0LDA1MyBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMwIDE5OjA0OjA0LDA4MSBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMCAxOTowNDowNCwyMzMgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWNvcmUvMi45LjYvamFja3Nvbi1jb3JlLTIuOS42LXNvdXJjZXMuamFyCisyMDIwLTAzLTMwIDE5OjA0OjA0LDcxNiBbV29ya2VyLTE2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvamFja3Nvbi1jb3JlLzIuOS42L2phY2tzb24tY29yZS0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxOTowNDowNSw3NTMgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlOmphY2tzb24tY29yZToyLjkuNgorMjAyMC0wMy0zMCAxOTowNDowNSw4MDYgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWFubm90YXRpb25zLzIuOS42L2phY2tzb24tYW5ub3RhdGlvbnMtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTk6MDQ6MDUsOTUwIFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9qYWNrc29uLWFubm90YXRpb25zLzIuOS42L2phY2tzb24tYW5ub3RhdGlvbnMtMi45LjYtc291cmNlcy5qYXIKKzIwMjAtMDMtMzAgMTk6MDQ6MDYsNDQyIFtXb3JrZXItMTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gRG93bmxvYWRlZCBzb3VyY2VzIGZvciBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWFubm90YXRpb25zOjIuOS42CisyMDIwLTAzLTMwIDE5OjA0OjA2LDUwMCBbV29ya2VyLTE2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tZGF0YWJpbmQvMi45LjYvamFja3Nvbi1kYXRhYmluZC0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxOTowNDowNywzMDYgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL2phY2tzb24tZGF0YWJpbmQvMi45LjYvamFja3Nvbi1kYXRhYmluZC0yLjkuNi1zb3VyY2VzLmphcgorMjAyMC0wMy0zMCAxOTowNDowNyw5NDkgW1dvcmtlci0xNjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBEb3dubG9hZGVkIHNvdXJjZXMgZm9yIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlOmphY2tzb24tZGF0YWJpbmQ6Mi45LjYKKzIwMjAtMDMtMzAgMTk6MDc6MzMsOTY5IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMCAxOTowNzozMyw5NjkgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMDk6MzQ6MTAsNDgxIFtXb3JrZXItNTk6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wMy0zMSAwOTo0MToyMywzMzYgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDA5OjQxOjIzLDMzNyBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAwOTo0Mjo1Myw0NjUgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDA5OjQyOjUzLDQ2NiBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAwOTo0NDowMyw2ODMgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDA5OjQ0OjAzLDY4MyBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMDowNTowOSwyNDYgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDEwOjA1OjA5LDI0NyBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMDo1Nzo0MywyOTAgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDEwOjU3OjQzLDI5MSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMToyMDo1MCw1OTMgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjIwOjUwLDYwNiBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMToyMjo0NiwzMDMgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjIyOjQ2LDMwMyBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMToyMzowNiwwODMgW1dvcmtlci03MjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDMtMzEgMTE6MjM6MTMsMTg1IFtXb3JrZXItNzI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wMy0zMSAxMToyMzoxNSw2MzkgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzEgMTE6MjM6MTUsNjg5IFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wMy0zMSAxMToyMzoxNSw3MDkgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDMtMzEgMTE6MjM6MTUsNzExIFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wMy0zMSAxMToyMzoxNSw3MTIgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMxIDExOjIzOjE1LDcxMiBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMxIDExOjIzOjE1LDcyNyBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMSAxMToyMzozMywyMDQgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjIzOjMzLDIwNCBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMToyNjowNCwxMjEgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjI2OjA0LDEyMSBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMToyNzoxNSwwODYgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjI3OjE1LDA4NyBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMToyODoxNCw5MDEgW1dvcmtlci03MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDExOjI4OjE0LDkwMSBbV29ya2VyLTcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxMTozMDoyMCw5NTkgW1dvcmtlci03NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTAzLTMxIDExOjMwOjIxLDI3MiBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMSAxMTozMDoyMSwzNTUgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTAzLTMxIDExOjMwOjIxLDM1NyBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wMy0zMSAxMTozMDoyMSwzNjEgW1dvcmtlci03MDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTAzLTMxIDExOjMwOjIxLDM2MiBbV29ya2VyLTcwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMzEgMTE6MzA6MjEsMzYyIFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDMtMzEgMTE6MzA6MjEsMzY3IFtXb3JrZXItNzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTAzLTMxIDExOjMxOjA3LDEwMSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDMtMzEgMTE6MzE6MDcsMTAxIFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTAzLTMxIDE2OjUzOjMyLDA3NyBbV29ya2VyLTY6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTAzLTMxIDE3OjE1OjU4LDA4OCBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wMy0zMSAxNzoxNTo1OCwxMTEgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxNzoyMDo0MSw2NzcgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzCisyMDIwLTAzLTMxIDE3OjIwOjQxLDY3NyBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wMy0zMSAxNzoyMjo0MCw3NTQgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDMtMzEgMTc6MjI6NDAsNzU1IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDMtMzEgMTk6MTk6MzksMDE3IFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDMtMzEgMTk6MjA6MjAsNTg0IFtXb3JrZXItNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTAxIDA5OjUyOjMyLDk0OSBbV29ya2VyLTM4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMDEgMDk6NTI6NDEsNTg2IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTAxIDA5OjUyOjQxLDY0NiBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDEgMDk6NTI6NDEsNjQ5IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTAxIDA5OjUyOjQxLDY1MiBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDEgMDk6NTI6NDEsNjU0IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0wMSAwOTo1Mjo0MSw2NTUgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0wMSAwOTo1Mjo0MSw3MjYgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIG9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczptYXZlbi1jbGVhbi1wbHVnaW46amFyOjIuNSBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNC0wMSAwOTo1Mjo0MSw4OTIgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDEgMDk6NTM6NDcsMjM2IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0wMSAwOTo1Mzo0NywyMzcgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDIgMTA6NTQ6NDMsNjc3IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMDIgMTE6MDI6MzksODAzIFtXb3JrZXItNTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTAyIDExOjUxOjE1LDc3MyBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMDIgMTE6NTE6MTUsNzc0IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTAyIDE1OjE4OjA5LDAyNyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMDIgMTU6MTg6MDksMDI3IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTAzIDE4OjA5OjQ3LDI4NiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTAzIDE5OjAwOjA4LDEwNSBbV29ya2VyLTIxOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMDMgMjA6MzQ6NTYsMDA1IFtXb3JrZXItMjU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTAzIDIwOjM0OjU2LDAxMyBbV29ya2VyLTI1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDMgMjA6MzQ6NTYsMDE1IFtXb3JrZXItMjU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTAzIDIwOjM0OjU2LDAxNyBbV29ya2VyLTI1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTE6Mzg6MzQsODAxIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLWphci1wbHVnaW4vMi40L21hdmVuLWphci1wbHVnaW4tMi40LmphcgorMjAyMC0wNC0wNCAxMTozODozNSwyNDQgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1qYXItcGx1Z2luLzIuNC9tYXZlbi1qYXItcGx1Z2luLTIuNC5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDEsNTY2IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHRlc3Q6VGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0wNCAxMTozODo0Miw1MTQgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tamFyLXBsdWdpbi8yLjQvbWF2ZW4tamFyLXBsdWdpbi0yLjQucG9tCisyMDIwLTA0LTA0IDExOjM4OjQyLDU2OCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL21hdmVuLWphci1wbHVnaW4vMi40L21hdmVuLWphci1wbHVnaW4tMi40LnBvbQorMjAyMC0wNC0wNCAxMTozODo0Miw2MjIgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4tcGx1Z2lucy8yMi9tYXZlbi1wbHVnaW5zLTIyLnBvbQorMjAyMC0wNC0wNCAxMTozODo0Miw3MjAgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi1wbHVnaW5zLzIyL21hdmVuLXBsdWdpbnMtMjIucG9tCisyMDIwLTA0LTA0IDExOjM4OjQzLDQ3MCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMi41L21hdmVuLWFyY2hpdmVyLTIuNS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDMsNTc4IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzIuNS9tYXZlbi1hcmNoaXZlci0yLjUucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ0LDEyMyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzIuMS9wbGV4dXMtYXJjaGl2ZXItMi4xLnBvbQorMjAyMC0wNC0wNCAxMTozODo0NCwyNTAgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWFyY2hpdmVyLzIuMS9wbGV4dXMtYXJjaGl2ZXItMi4xLnBvbQorMjAyMC0wNC0wNCAxMTozODo0NCwzMTggW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAvcGxleHVzLXV0aWxzLTMuMC5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDQsNDk5IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAvcGxleHVzLXV0aWxzLTMuMC5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDQsNTU1IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3NwaWNlL3NwaWNlLXBhcmVudC8xNi9zcGljZS1wYXJlbnQtMTYucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ0LDYxNiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NvbmF0eXBlL3NwaWNlL3NwaWNlLXBhcmVudC8xNi9zcGljZS1wYXJlbnQtMTYucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ0LDgzNyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzIuMC4yL3BsZXh1cy1pby0yLjAuMi5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDQsOTQ5IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1pby8yLjAuMi9wbGV4dXMtaW8tMi4wLjIucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ1LDAxNCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNvbXBvbmVudHMvMS4xLjE5L3BsZXh1cy1jb21wb25lbnRzLTEuMS4xOS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDUsMzIzIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnRzLzEuMS4xOS9wbGV4dXMtY29tcG9uZW50cy0xLjEuMTkucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ1LDM3NyBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLzMuMC4xL3BsZXh1cy0zLjAuMS5wb20KKzIwMjAtMDQtMDQgMTE6Mzg6NDUsNDU3IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy8zLjAuMS9wbGV4dXMtMy4wLjEucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ1LDUxMiBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4xNS9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjE1LnBvbQorMjAyMC0wNC0wNCAxMTozODo0OCwzNjEgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4xNS9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjE1LnBvbQorMjAyMC0wNC0wNCAxMTozODo0OCw0NDkgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWxhbmcvY29tbW9ucy1sYW5nLzIuMS9jb21tb25zLWxhbmctMi4xLnBvbQorMjAyMC0wNC0wNCAxMTozODo0OCw1NzYgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtbGFuZy9jb21tb25zLWxhbmcvMi4xL2NvbW1vbnMtbGFuZy0yLjEucG9tCisyMDIwLTA0LTA0IDExOjM4OjQ4LDg4NSBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJjaGl2ZXIvMi41L21hdmVuLWFyY2hpdmVyLTIuNS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksMjQ4IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFyY2hpdmVyLzIuNS9tYXZlbi1hcmNoaXZlci0yLjUuamFyCisyMDIwLTA0LTA0IDExOjM4OjQ5LDI4NCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4xNS9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjE1LmphcgorMjAyMC0wNC0wNCAxMTozODo0OSwzNzcgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS4xNS9wbGV4dXMtaW50ZXJwb2xhdGlvbi0xLjE1LmphcgorMjAyMC0wNC0wNCAxMTozODo0OSw0MTggW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8yLjEvcGxleHVzLWFyY2hpdmVyLTIuMS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksNTM2IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1hcmNoaXZlci8yLjEvcGxleHVzLWFyY2hpdmVyLTIuMS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksNTc3IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW8vMi4wLjIvcGxleHVzLWlvLTIuMC4yLmphcgorMjAyMC0wNC0wNCAxMTozODo0OSw2NTIgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWlvLzIuMC4yL3BsZXh1cy1pby0yLjAuMi5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksNjk2IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1sYW5nL2NvbW1vbnMtbGFuZy8yLjEvY29tbW9ucy1sYW5nLTIuMS5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NDksODUyIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWxhbmcvY29tbW9ucy1sYW5nLzIuMS9jb21tb25zLWxhbmctMi4xLmphcgorMjAyMC0wNC0wNCAxMTozODo0OSw4OTMgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAvcGxleHVzLXV0aWxzLTMuMC5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NTAsMDE0IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjAvcGxleHVzLXV0aWxzLTMuMC5qYXIKKzIwMjAtMDQtMDQgMTE6Mzg6NTIsMzkyIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYworMjAyMC0wNC0wNCAxMTozODo1MiwzOTMgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9UZXN0cy9zcmMKKzIwMjAtMDQtMDQgMTE6Mzg6NTMsNjc4IFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTA0IDExOjM4OjU0LDgzNCBbV29ya2VyLTE2ODogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB0ZXN0OlRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMDQgMTE6Mzg6NTUsMTYzIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYworMjAyMC0wNC0wNCAxMTozODo1NSwxNjQgW1dvcmtlci0xNjg6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL1Rlc3RzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9UZXN0cy9zcmMKKzIwMjAtMDQtMDQgMTE6Mzg6NTUsMzAxIFtXb3JrZXItMTY4OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDEgc2VjCisyMDIwLTA0LTA0IDExOjQwOjE1LDQ1MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMDQgMTE6NDA6NDEsMzg0IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0wNCAxMTo0MTowNywzNjcgW1dvcmtlci0xNzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMTo0MTowNywzNjcgW1dvcmtlci0xNzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDExOjQ1OjUzLDQ2NCBbV29ya2VyLTE2NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDExOjQ1OjUzLDQ5MiBbV29ya2VyLTE2NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMTo0NTo1Myw0OTYgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMTo0NTo1Myw0OTkgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTE6NDk6MDgsMDg3IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTE6NDk6MDgsMDg3IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMTo0OToyNSw1MDEgW1dvcmtlci0xNjk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMTo0OToyNSw1MTYgW1dvcmtlci0xNjk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTE6NDk6MjUsNTE4IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTE6NDk6MjUsNTIwIFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDExOjU2OjM4LDAxMCBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDExOjU2OjM4LDAxMSBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTE6NTY6NTEsMzkyIFtXb3JrZXItMTY3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTE6NTY6NTEsMzkzIFtXb3JrZXItMTY3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDExOjU2OjUxLDM5NCBbV29ya2VyLTE2NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDExOjU2OjUxLDQyMSBbV29ya2VyLTE2NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMjowMzoxMSw2MjEgW1dvcmtlci0xNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMjowMzoxMSw2MjEgW1dvcmtlci0xNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEyOjA0OjI0LDE0NyBbV29ya2VyLTE3MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MDQ6MjQsMTQ5IFtXb3JrZXItMTcyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MDQ6MjQsMTUxIFtXb3JrZXItMTcyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjowNDoyNCwxNTMgW1dvcmtlci0xNzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMjowNDoyNCwyMzAgW1dvcmtlci0xNzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjA0OjI0LDIzMiBbV29ya2VyLTE3MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjA0OjI0LDIzMyBbV29ya2VyLTE3MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MDQ6MjQsMjM1IFtXb3JrZXItMTcyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MDQ6MzQsMzY2IFtXb3JrZXItMTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6MDQ6MzQsMzY2IFtXb3JrZXItMTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjowNTo0NSw1OTEgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMjowNTo0NSw1OTEgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEyOjA5OjE5LDY0OSBbV29ya2VyLTE3NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjA5OjE5LDY1MSBbV29ya2VyLTE3NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMjowOToxOSw2NTIgW1dvcmtlci0xNzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjowOToxOSw2NTQgW1dvcmtlci0xNzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MTE6MTcsMjg3IFtXb3JrZXItMTczOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MTE6MTcsMjg5IFtXb3JrZXItMTczOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjExOjE3LDI5MyBbV29ya2VyLTE3MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjExOjE3LDI5NyBbV29ya2VyLTE3MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMjoxMjoxMyw3MzMgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMjoxMjoxMyw3MzMgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEyOjEyOjU5LDk3NyBbV29ya2VyLTE2NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEyOjEyOjU5LDk4MyBbV29ya2VyLTE2NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMjoxMjo1OSw5ODYgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoxMjo1OSw5ODkgW1dvcmtlci0xNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MTY6MTMsMDYzIFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMDQgMTI6MTY6MzksNjk0IFtXb3JrZXItNzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTA0IDEyOjE4OjAxLDcyMyBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6MTg6MDEsNzI0IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEyOjE4OjMzLDY2NCBbV29ya2VyLTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoxODozMyw2NjcgW1dvcmtlci02OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjE4OjMzLDY3MSBbV29ya2VyLTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoxODozMyw2NzMgW1dvcmtlci02OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjI3OjAyLDkyMCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6Mjc6MDIsOTIxIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEyOjI3OjE3LDcyNSBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoyNzoxNyw3NDAgW1dvcmtlci0xOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjI3OjE3LDc0MiBbV29ya2VyLTE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjoyNzoxNyw3NTAgW1dvcmtlci0xOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEyOjM1OjM2LDMxOCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6MzU6MzYsMzE4IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEyOjM1OjU0LDk4NiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTI6MzU6NTQsOTg4IFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTI6MzU6NTQsOTg5IFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMjozNTo1NCw5OTEgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMjo1ODowOCw5NzcgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEyOjU4OjA4LDk3OCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMjo1ODo1Myw5MTUgW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTI6NTg6NTMsOTE2IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTM6MDA6MzksNTg0IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMzowMDozOSw1ODQgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTM6MDA6NTQsMDMxIFtXb3JrZXItMTc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMzowMDo1NCwwMzMgW1dvcmtlci0xNzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMzowMDo1NCwwMzUgW1dvcmtlci0xNzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEzOjAwOjU0LDAzNyBbV29ya2VyLTE3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEzOjAyOjE3LDk2NiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDQgMTM6MDI6MTcsOTY2IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA0IDEzOjAyOjI5LDUyOSBbV29ya2VyLTEyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTM6MDI6MjksNTMxIFtXb3JrZXItMTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTM6MDI6MjksNTMyIFtXb3JrZXItMTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMzowMjoyOSw1NTUgW1dvcmtlci0xMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxMzoyODowNiw0NTEgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDEzOjI4OjA2LDQ1MiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxMzoyODoyNSwxNjIgW1dvcmtlci0yMzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEzOjI4OjI1LDE4NCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA0IDEzOjI4OjI1LDE4NSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTM6Mjg6MjUsMTg3IFtXb3JrZXItMjM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTM6MzA6MzgsNzMwIFtXb3JrZXItMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNCAxMzozMDozOCw3MzAgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDQgMTM6MzA6NTEsOTc3IFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxMzozMDo1MSw5NzkgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNCAxMzozMDo1MSw5ODAgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA0IDEzOjMwOjUxLDk4MiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA0IDE4OjMyOjU0LDc4OCBbV29ya2VyLTQ5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDQgMTg6MzI6NTQsODM0IFtXb3JrZXItNDk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDQgMTg6MzI6NTQsODM1IFtXb3JrZXItNDk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNCAxODozMjo1NCw4MzcgW1dvcmtlci00OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNCAxODozNjozMCw2NjUgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDE4OjM2OjMwLDY2NiBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxODozOTozNSwwNzkgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDE4OjM5OjM1LDA3OSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNCAxODo0MzowMiw2ODEgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA0IDE4OjQzOjAyLDY4MSBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAwODoxMzoyMCwwODkgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNC0wNiAxMTo1MTowMywyNDQgW1dvcmtlci00MzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTA2IDExOjUyOjUzLDI5NSBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTE6NTI6NTMsMjk2IFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDExOjU0OjMyLDcxOSBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTE6NTQ6MzIsNzIwIFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDExOjU0OjU0LDUyMCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTE6NTQ6NTQsNTMwIFtXb3JrZXItNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTE6NTQ6NTQsNTM0IFtXb3JrZXItNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxMTo1NDo1NCw1MzcgW1dvcmtlci00MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNiAxMjowMDoxOSw3NzMgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDEyOjAwOjE5LDc3MyBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxMjowMDo0Niw4NjUgW1dvcmtlci00NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDEyOjAwOjQ2LDg2NyBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDEyOjAwOjQ2LDg3MCBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTI6MDA6NDYsODcxIFtXb3JrZXItNDc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTI6Mzk6MzYsNjI2IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxMjozOTozNiw3NDEgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTU6MTg6MTMsMDQyIFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNToxODoxMywwNDUgW1dvcmtlci04MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTU6MTg6MjQsNjAxIFtXb3JrZXItODA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNToxODoyNCw2MDcgW1dvcmtlci04MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNToxODoyNCw2MTAgW1dvcmtlci04MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjE4OjI0LDYxMiBbV29ya2VyLTgwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE1OjIxOjE4LDg1OCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTU6MjE6MTgsODU4IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE1OjIxOjMxLDM5MyBbV29ya2VyLTgxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6MjE6MzEsMzk1IFtXb3JrZXItODE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6MjE6MzEsMzk3IFtXb3JrZXItODE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNToyMTozMSw0MDAgW1dvcmtlci04MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNiAxNToyMzo1MSw4NTEgW1dvcmtlci04MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE1OjIzOjUxLDg1MSBbV29ya2VyLTgyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNToyNDoxNyw3NDkgW1dvcmtlci04MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE1OjI0OjE3LDc0OSBbV29ya2VyLTgwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNToyNDozNCwwMjcgW1dvcmtlci04MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjI0OjM0LDAzMCBbV29ya2VyLTgxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE1OjI0OjM0LDAzMyBbV29ya2VyLTgxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6MjQ6MzQsMDQ5IFtXb3JrZXItODE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTU6MzA6MjIsMjU5IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNTozMDoyMiwyNjAgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTU6MzE6MzMsNTQ2IFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNTozMTozMyw1NDggW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNTozMTozMyw1NTAgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjMxOjMzLDU1MiBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE1OjQ4OjIwLDcwOSBbV29ya2VyLTEwNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE1OjQ4OjIwLDcxMCBbV29ya2VyLTEwNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTU6NDg6MzQsNjUxIFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTU6NDg6MzQsNjUzIFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE1OjQ4OjM0LDY1NSBbV29ya2VyLTEwNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjQ4OjM0LDY1NyBbV29ya2VyLTEwNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNiAxNTo1MTo1Miw0MzMgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNTo1MTo1Miw0MzMgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE1OjUyOjA0LDI4NiBbV29ya2VyLTEwODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE1OjUyOjA0LDI4OCBbV29ya2VyLTEwODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNTo1MjowNCwyOTAgW1dvcmtlci0xMDg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNTo1MjowNCwyOTIgW1dvcmtlci0xMDg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTY6MDI6MDcsNzY3IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTY6MDI6MDcsNzY4IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNjowMjoyMCwxMzIgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNiAxNjowMjoyMCwxMzMgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA2IDE2OjAyOjIwLDEzNCBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIFdBUk4gIG8uZS5tLmkubC5NYXZlbkxhdW5jaEV4dGVuc2lvbnNTdXBwb3J0IC0gVW5rbm93biBvciB1bnN1cHBvcnRlZCBzb3VyY2UgbG9jYXRvciBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwubGF1bmNoaW5nLnNvdXJjZWxvb2t1cC5hZHZhbmNlZC5BZHZhbmNlZFNvdXJjZUxvb2t1cERpcmVjdG9yCisyMDIwLTA0LTA2IDE2OjAyOjM4LDkxNCBbV29ya2VyLTExNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE2OjAyOjM4LDkxOSBbV29ya2VyLTExNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNiAxNjowMjozOCw5MjIgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNjowMjozOCw5MjUgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTY6NDU6MzMsMjQwIFtXb3JrZXItMTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDYgMTY6NDU6MzMsMjQwIFtXb3JrZXItMTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNiAxNjo0NTo0NCwxODEgW1dvcmtlci0xMjY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNiAxNjo0NTo0NCwxODMgW1dvcmtlci0xMjY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDYgMTY6NDU6NDQsMTg2IFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTY6NDU6NDQsMTg4IFtXb3JrZXItMTI2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE2OjQ2OjIwLDk1OCBbV29ya2VyLTEyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA2IDE2OjQ2OjIwLDk1OCBbV29ya2VyLTEyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDYgMTY6NDY6MzMsMTQ1IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDYgMTY6NDY6MzMsMTQ5IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA2IDE2OjQ2OjMzLDE1MyBbV29ya2VyLTExOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA2IDE2OjQ2OjMzLDE1NiBbV29ya2VyLTExOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAwODozNDozOSwwNTQgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNC0wNyAwODozNzo0NCw0NTkgW1dvcmtlci0yOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDg6Mzc6NDQsNDYxIFtXb3JrZXItMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAwODozNzo0NCw0NjQgW1dvcmtlci0yOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDg6Mzc6NDQsNDY1IFtXb3JrZXItMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAwODozOToxNywzODYgW1dvcmtlci0xODogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTA3IDA4OjM5OjQzLDE5MiBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAwODozOTo0MywxOTMgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAwODo0MDowMCw5MzggW1dvcmtlci05OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDg6NDA6MDAsOTQwIFtXb3JrZXItOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAwODo0MDowMCw5NDMgW1dvcmtlci05OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDg6NDA6MDAsOTQ1IFtXb3JrZXItOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAwODo0Mjo1MSw2NDggW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDA4OjQyOjUxLDY0OCBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAwODo0MzowNSw4MTcgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjQzOjA1LDgyMCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDA4OjQzOjA1LDgyMyBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDg6NDM6MDUsODI2IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDg6NDQ6MTgsODEzIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAwODo0NDoxOCw4MTMgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMDg6NDQ6MjgsNjU0IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAwODo0NDoyOCw2NTYgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAwODo0NDoyOCw2NTggW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA4OjQ0OjI4LDY1OSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDA5OjA1OjM0LDkwMyBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMDk6MDU6MzQsOTAzIFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDA5OjE4OjQxLDQ3MSBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMDk6MTg6NDEsNDcxIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDA5OjE5OjAxLDUxMiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDk6MTk6MDEsNTE0IFtXb3JrZXItMzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMDk6MTk6MDEsNTE3IFtXb3JrZXItMzQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAwOToxOTowMSw1MjEgW1dvcmtlci0zNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAwOTo1Njo1NSwyMTQgW1dvcmtlci00MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDA5OjU2OjU1LDIxNSBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAwOTo1NzoxMiw2OTkgW1dvcmtlci00NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDA5OjU3OjEyLDcwMSBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDA5OjU3OjEyLDcwNCBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMDk6NTc6MTIsNzA2IFtXb3JrZXItNDQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTA6MDI6NDEsMTQyIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxMDowMjo0MSwxNDIgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTA6MDI6NTIsMDY2IFtXb3JrZXItNDU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMDowMjo1MiwwNjggW1dvcmtlci00NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxMDowMjo1MiwwNzAgW1dvcmtlci00NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDEwOjAyOjUyLDA3MiBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDEwOjU1OjU2LDM3NiBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTA6NTU6NTYsMzc3IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDEwOjU2OjQxLDg3NyBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTA6NTY6NDEsODc4IFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDEwOjU2OjUzLDg4MyBbV29ya2VyLTU5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTA6NTY6NTMsODg1IFtXb3JrZXItNTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTA6NTY6NTMsODg4IFtXb3JrZXItNTk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMDo1Njo1Myw4ODkgW1dvcmtlci01OTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxMDo1NzoyMSw1NTUgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDEwOjU3OjIxLDU1NSBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxMDo1NzozMyw0MzggW1dvcmtlci01NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDEwOjU3OjMzLDQ0MCBbV29ya2VyLTU1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDEwOjU3OjMzLDQ0MiBbV29ya2VyLTU1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTA6NTc6MzMsNDQ0IFtXb3JrZXItNTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTA6NTg6MDIsNzIzIFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxMDo1ODowMiw3MjMgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTA6NTg6MTQsNjE0IFtXb3JrZXItNTc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMDo1ODoxNCw2MTYgW1dvcmtlci01NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxMDo1ODoxNCw2MTggW1dvcmtlci01NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDEwOjU4OjE0LDYyMCBbV29ya2VyLTU3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDExOjA0OjM4LDQ1MiBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTE6MDQ6MzgsNDUyIFtXb3JrZXItNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDExOjA0OjQ5LDY5NSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTE6MDQ6NDksNjk2IFtXb3JrZXItNTg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTE6MDQ6NDksNjk4IFtXb3JrZXItNTg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMTowNDo0OSw2OTkgW1dvcmtlci01ODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxMTowOTo0NSw5MjMgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDExOjA5OjQ1LDkyMyBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxMTowOTo1NiwxMTggW1dvcmtlci02MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDExOjA5OjU2LDEyMCBbV29ya2VyLTYwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDExOjA5OjU2LDEyMiBbV29ya2VyLTYwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTE6MDk6NTYsMTI0IFtXb3JrZXItNjA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTE6MTQ6MzQsNDUwIFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxMToxNDozNCw0NTAgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTE6MTQ6NDgsODg3IFtXb3JrZXItNjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxMToxNDo0OCw4ODkgW1dvcmtlci02NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxMToxNDo0OCw4OTAgW1dvcmtlci02NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDExOjE0OjQ4LDg5MiBbV29ya2VyLTY0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDE0OjA3OjE0LDU3NSBbV29ya2VyLTgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTQ6MDc6MTQsNTc2IFtXb3JrZXItODM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDE0OjE0OjEwLDU5OSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDcgMTQ6MTQ6MTAsNTk5IFtXb3JrZXItODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDE0OjE0OjI1LDcyNSBbV29ya2VyLTg0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTQ6MTQ6MjUsNzI3IFtXb3JrZXItODQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTQ6MTQ6MjUsNzI5IFtXb3JrZXItODQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNDoxNDoyNSw3MzEgW1dvcmtlci04NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxNDoxNjoyMyw0NjcgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDE0OjE2OjIzLDQ2NyBbV29ya2VyLTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wNyAxNDoxNjozNywzNTIgW1dvcmtlci04NDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE0OjE2OjM3LDM1NCBbV29ya2VyLTg0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDE0OjE2OjM3LDM1NSBbV29ya2VyLTg0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTQ6MTY6MzcsMzU2IFtXb3JrZXItODQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDcgMTQ6MzE6NTYsNDMxIFtXb3JrZXItODU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxNDozMTo1Niw0MzIgW1dvcmtlci04NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTQ6MzI6MTcsMzM2IFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNDozMjoxNyw0NzUgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxNDozMjoxNyw0NzcgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE0OjMyOjE3LDQ3OSBbV29ya2VyLTg1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA3IDE1OjUxOjUyLDEwNSBbV29ya2VyLTExNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA3IDE1OjUxOjUyLDEwNiBbV29ya2VyLTExNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDcgMTU6NTI6MjIsNDc2IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDcgMTU6NTI6MjIsNDc4IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA3IDE1OjUyOjIyLDQ4MCBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE1OjUyOjIyLDQ4MSBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wNyAxNzo0MToyMyw4MjkgW1dvcmtlci0xNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wNyAxNzo0MToyMyw4MjkgW1dvcmtlci0xNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA3IDE3OjQxOjM1LDc2MSBbV29ya2VyLTE0MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA3IDE3OjQxOjM1LDc2MyBbV29ya2VyLTE0MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wNyAxNzo0MTozNSw3NjUgW1dvcmtlci0xNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wNyAxNzo0MTozNSw3NjcgW1dvcmtlci0xNDM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMDg6MTA6MzUsNDExIFtXb3JrZXItMTI6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0wOCAwODoxMToxNSw4MjUgW1dvcmtlci0xODogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMDggMDg6MTE6MjQsNDQ5IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOCAwODoxMToyNCw0NTAgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDggMDg6MTE6NDUsNTc2IFtXb3JrZXItMTY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAwODoxMTo0NSw1NzggW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOCAwODoxMTo0NSw1ODEgW1dvcmtlci0xNjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDA4OjExOjQ1LDU4MyBbV29ya2VyLTE2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA4IDEyOjM1OjEwLDMwOSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDggMTI6MzU6MTAsMzExIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA4IDEyOjM1OjM3LDAyOCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTI6MzU6MzcsMDM5IFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTI6MzU6MzcsMDQyIFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxMjozNTozNywwNDQgW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOCAxMjozNjozOSw4NTYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA4IDEyOjM2OjM5LDg1NiBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOCAxMjozNjo1Nyw2MjMgW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDEyOjM2OjU3LDYyNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA4IDEyOjM2OjU3LDYyNiBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTI6MzY6NTcsNjI3IFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTQ6MjM6MzcsMzg5IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOCAxNDoyMzozNywzODkgW1dvcmtlci01NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDggMTQ6MjM6NTIsMTQ1IFtXb3JrZXItNTI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxNDoyMzo1MiwxNDkgW1dvcmtlci01MjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOCAxNDoyMzo1MiwxNTEgW1dvcmtlci01MjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDE0OjIzOjUyLDE1NyBbV29ya2VyLTUyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA4IDE0OjUwOjA2LDA5MyBbV29ya2VyLTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDggMTQ6NTA6MDYsMjgwIFtXb3JrZXItNjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA4IDE0OjUwOjUxLDU4MSBbV29ya2VyLTY3OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTQ6NTA6NTEsNTg1IFtXb3JrZXItNjc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTQ6NTA6NTEsNTg3IFtXb3JrZXItNjc6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxNDo1MDo1MSw2MjIgW1dvcmtlci02NzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOCAxNToxMTo0OSwxNjEgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA4IDE1OjExOjQ5LDE2MiBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOCAxNToxMjowMCw3NTcgW1dvcmtlci02ODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDE1OjEyOjAwLDc1OSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA4IDE1OjEyOjAwLDc2MSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDggMTU6MTI6MDAsNzYzIFtXb3JrZXItNjg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDggMTU6MTM6NTUsNTIxIFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOCAxNToxMzo1NSw1MjEgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDggMTU6MTQ6MDcsMDI4IFtXb3JrZXItNzM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOCAxNToxNDowNywwMzAgW1dvcmtlci03MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOCAxNToxNDowNywwMzIgW1dvcmtlci03MzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA4IDE1OjE0OjA3LDAzMyBbV29ya2VyLTczOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDA5OjAyOjA1LDcwNCBbV29ya2VyLTM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTA5IDA5OjU5OjUxLDMwOCBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDkgMDk6NTk6NTEsMzA5IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA5IDEwOjI1OjAwLDA2MCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6MjU6MDAsMDYyIFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTA6MjU6MDAsMDY1IFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDoyNTowMCwwNjcgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxMDoyNzozMCw0NzIgW1dvcmtlci0yNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA5IDEwOjI3OjMwLDQ3MiBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOSAxMDoyNzo0MywwMjUgW1dvcmtlci0yNDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDEwOjI3OjQzLDAyOSBbV29ya2VyLTI0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDEwOjI3OjQzLDAzMiBbV29ya2VyLTI0OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6Mjc6NDMsMDM1IFtXb3JrZXItMjQ6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTA6Mzk6MDIsNTQ1IFtXb3JrZXItMjk6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDozOTowMiw1NDggW1dvcmtlci0yOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxMDozOTowMiw1NTAgW1dvcmtlci0yOTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDEwOjM5OjAyLDU1MyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDEwOjUxOjA2LDQ1MSBbV29ya2VyLTI2OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMDkgMTA6NTE6NTEsNDIwIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOSAxMDo1MTo1MSw0MjAgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDkgMTA6NTI6MDMsNjI2IFtXb3JrZXItMzM6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDo1MjowMyw2MjggW1dvcmtlci0zMzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxMDo1MjowMyw2MzAgW1dvcmtlci0zMzogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDEwOjUyOjAzLDYzMiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDEwOjU4OjA4LDczNyBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDkgMTA6NTg6MDgsNzM3IFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA5IDEwOjU4OjI2LDE5OCBbV29ya2VyLTM4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTA6NTg6MjYsMjAwIFtXb3JrZXItMzg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTA6NTg6MjYsMjAxIFtXb3JrZXItMzg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxMDo1ODoyNiwyMDQgW1dvcmtlci0zODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxMToxODo0MSw5MjEgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA5IDExOjE4OjQxLDkyMSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOSAxMToxOTowNiw4MzAgW1dvcmtlci0zMjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDExOjE5OjA2LDgzMyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDExOjE5OjA2LDgzNCBbV29ya2VyLTMyOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTE6MTk6MDYsODM2IFtXb3JrZXItMzI6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NDc6MTEsMjM4IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0wOSAxNjo0NzoxMSwyMzkgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMDkgMTY6NDg6MDIsMTg0IFtXb3JrZXItMzE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo0ODowMiwxODYgW1dvcmtlci0zMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxNjo0ODowMiwxODggW1dvcmtlci0zMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE2OjQ4OjAyLDE5MSBbV29ya2VyLTMxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjQ5OjI1LDI3MCBbV29ya2VyLTM4OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NDk6MjUsMjczIFtXb3JrZXItMzg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NDk6MjUsMjc1IFtXb3JrZXItMzg6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo0OToyNSwyNzYgW1dvcmtlci0zODogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxNjo1MDo0NCw4OTQgW1dvcmtlci00MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE2OjUwOjQ0LDg5NiBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjUwOjQ0LDg5OCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NTA6NDQsODk5IFtXb3JrZXItNDE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NTI6MjEsMDAzIFtXb3JrZXItNTA6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo1MjoyMSwwMDUgW1dvcmtlci01MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0wOSAxNjo1MjoyMSwwMDcgW1dvcmtlci01MDogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE2OjUyOjIxLDAwOSBbV29ya2VyLTUwOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE2OjU3OjIyLDExNCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMDkgMTY6NTc6MjIsMTE0IFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTA5IDE2OjU3OjM1LDAxOSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTY6NTc6MzUsMDIxIFtXb3JrZXItNDY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMDkgMTY6NTc6MzUsMDIyIFtXb3JrZXItNDY6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0wOSAxNjo1NzozNSwwMjQgW1dvcmtlci00NjogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0wOSAxNzowMzozNSwyMDkgW1dvcmtlci01NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTA5IDE3OjAzOjM1LDIwOSBbV29ya2VyLTU2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0wOSAxNzowMzo0OCw3NjggW1dvcmtlci01MTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTA5IDE3OjAzOjQ4LDc3MCBbV29ya2VyLTUxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTA5IDE3OjAzOjQ4LDc3MSBbV29ya2VyLTUxOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMDkgMTc6MDM6NDgsNzczIFtXb3JrZXItNTE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMTQgMTU6MDM6MjQsNzAxIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMTQgMTU6MTA6MzYsNDg2IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNToxMDozNiw0ODggW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTU6MTA6NTcsMTMwIFtXb3JrZXItNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTE0IDE1OjEwOjU3LDEzMyBbV29ya2VyLTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMTQgMTU6MTA6NTcsMTM2IFtXb3JrZXItNTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTE0IDE1OjEwOjU3LDEzOCBbV29ya2VyLTU6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMTQgMTU6MTI6NDYsNjQxIFtXb3JrZXItMTQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0xNCAxNToxNDozMywxMjIgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTE0IDE1OjE0OjMzLDEyMiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0xNCAxNToxNDo0NiwyMTkgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uICgxKV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTE0IDE1OjE0OjQ2LDIyMiBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTE0IDE1OjE0OjQ2LDIyNCBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb24gKDEpXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMTQgMTU6MTQ6NDYsMjI2IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbiAoMSldIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMTQgMTY6MjE6NDAsMjE1IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNjoyMTo0MCwyMTYgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTY6NTk6MzcsNzQ2IFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNjo1OTozNyw3NDcgW1dvcmtlci00NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTc6Mzk6NTAsNzgxIFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNzozOTo1MCw3OTkgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTc6NDA6NDYsNjA2IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNzo0MDo0Niw2MDYgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTc6NDE6NDAsODkyIFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0xNCAxNzo0MTo0MCw4OTIgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTc6NDE6NTksMTU5IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNzo0MTo1OSwxNTkgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTc6NDY6MDUsNDc3IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxNzo0NjowNSw0NzggW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTQgMTg6MjA6MDIsNzA1IFtXb3JrZXItNjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNCAxODoyMDowMiw3MDYgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDg6MzA6MTgsMjE2IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMTUgMDg6NDA6MDcsNzA1IFtXb3JrZXItMDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTE1IDA4OjQxOjU5LDIyNiBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNSAwODo0MTo1OSwyMjcgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0xNSAwODo0Mzo1MCw1MTggW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDg6NDM6NTAsNTE4IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDg6NDQ6MzYsMTM3IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNSAwODo0NDozNiwxMzcgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDg6NTA6MDgsNjI4IFtXb3JrZXItMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNSAwODo1MDowOCw2MjggW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDg6NTM6MDIsMTgwIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNSAwODo1MzowMiwxODAgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMTUgMDg6NTQ6MDcsNzI1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0xNSAwODo1NDowNyw3MjcgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0xNSAwODo1NDowNyw3MzAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTE1IDA4OjU0OjA3LDczNCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTE1IDA4OjU0OjEwLDk0OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMTUgMDg6NTQ6MTAsOTUyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMTUgMDg6NTQ6MTAsOTU0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0xNSAwODo1NDoxMCw5NTYgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0xNSAwOTowNzo1OCw3NTcgW1dvcmtlci0yMTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTE1IDA5OjA4OjE1LDYxMCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMTUgMDk6MDg6MTUsNjEwIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDA5OjExOjAyLDc5MCBbV29ya2VyLTc6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTE1IDA5OjEzOjM5LDk4MyBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cworMjAyMC0wNC0xNSAwOToxMzozOSw5ODUgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0xNSAwOToxNzowMywyMDQgW1dvcmtlci02OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0xNSAwOToxNzowNCw2NTIgW1dvcmtlci02OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB0ZXN0OlRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMTUgMDk6MTc6MDUsOTE2IFtXb3JrZXItNjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjCisyMDIwLTA0LTE1IDA5OjE3OjA1LDkxNyBbV29ya2VyLTY6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvVGVzdHMvc3JjCisyMDIwLTA0LTE1IDA5OjE3OjA2LDExMCBbV29ya2VyLTY6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDIgc2VjCisyMDIwLTA0LTE1IDA5OjIwOjUzLDk5OCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTE1IDA5OjI3OjAyLDQ5MSBbV29ya2VyLTEyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0xNSAwOToyNzowMywwODggW1dvcmtlci0xMjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTE1IDA5OjI3OjAzLDY1MSBbV29ya2VyLTEyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvMC4xL3NlcnZpY2VzLTAuMS5wb20KKzIwMjAtMDQtMTUgMDk6Mjc6MDMsNjU5IFtXb3JrZXItMTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6c2VydmljZXM6amFyOjAuMSBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNC0xNSAwOToyNzowMyw4MTQgW1dvcmtlci0xMjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzLzAuMS9zZXJ2aWNlcy0wLjEuamFyCisyMDIwLTA0LTE1IDA5OjI3OjA0LDM4MCBbV29ya2VyLTEyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMKKzIwMjAtMDQtMTUgMDk6Mjc6MDQsMzgxIFtXb3JrZXItMTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvVGVzdHMvc3JjCisyMDIwLTA0LTE1IDA5OjI3OjA0LDU1NiBbV29ya2VyLTEyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAyIHNlYworMjAyMC0wNC0xNSAwOToyNzowNSwyMTkgW1dvcmtlci0xMjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcDpzZXJ2aWNlczpqYXI6MC4xIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA0LTE1IDA5OjI3OjA1LDUyNCBbV29ya2VyLTEyOiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvMC4xL3NlcnZpY2VzLTAuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0xNSAwOToyNzowNSw1NzkgW1dvcmtlci0xMjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXA6c2VydmljZXM6MC4xCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXA6c2VydmljZXM6amFyOnNvdXJjZXM6MC4xCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA0LTE1IDA5OjI3OjA1LDc0MiBbV29ya2VyLTEyOiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvMC4xL3NlcnZpY2VzLTAuMS1qYXZhZG9jLmphcgorMjAyMC0wNC0xNSAwOToyNzowNSw3NTMgW1dvcmtlci0xMjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgamF2YWRvYyBmb3IgZGUua29yYXA6c2VydmljZXM6MC4xCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXA6c2VydmljZXM6amFyOmphdmFkb2M6MC4xCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA0LTE1IDE3OjU5OjU4LDA2MSBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEdsZW1tQ2xpZW50OkdsZW1tQ2xpZW50OjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDQtMTUgMTc6NTk6NTgsNjg4IFtXb3JrZXItNjE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1DbGllbnQvc3JjCisyMDIwLTA0LTE1IDE3OjU5OjU4LDY4OSBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbUNsaWVudC9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1DbGllbnQvc3JjCisyMDIwLTA0LTE1IDE3OjU5OjU4LDk4NSBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTE1IDE3OjU5OjU5LDA3NiBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEdsZW1tQ2xpZW50OkdsZW1tQ2xpZW50OjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDQtMTUgMTc6NTk6NTksMTc4IFtXb3JrZXItNjE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1DbGllbnQvc3JjCisyMDIwLTA0LTE1IDE3OjU5OjU5LDE4MCBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbUNsaWVudC9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1DbGllbnQvc3JjCisyMDIwLTA0LTE1IDE3OjU5OjU5LDI5MiBbV29ya2VyLTYxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDAgc2VjCisyMDIwLTA0LTE1IDE4OjAwOjM2LDg2MiBbV29ya2VyLTY0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxHbGVtbUNsaWVudAorMjAyMC0wNC0xNSAxODowMDozNiw4NjMgW1dvcmtlci02NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTE1IDE4OjA5OjAyLDc4NiBbV29ya2VyLTY2OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTE1IDE4OjEwOjA3LDY4MSBbV29ya2VyLTY0OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjAgMTk6MDA6MjksNDY1IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMjAgMTk6MDI6MzgsOTIzIFtXb3JrZXItNjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTIxIDEwOjA5OjM1LDE3MyBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTIxIDEyOjExOjU2LDI5NSBbV29ya2VyLTY6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTIxIDEyOjEzOjA3LDE0NCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogR2xlbW1DbGllbnQ6R2xlbW1DbGllbnQ6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxwb20ueG1sLgorMjAyMC0wNC0yMSAxMjoxMzo0OSwyMjUgW1dvcmtlci03OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yMSAxMjoxMzo0OSwyMjYgW1dvcmtlci03OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjEgMTI6MTQ6MjYsNDExIFtXb3JrZXItNjogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjEgMTI6MTQ6NDMsNjMxIFtXb3JrZXItOTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB0ZXN0OlRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMjEgMTI6MTY6MTgsMDU5IFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIxIDEyOjE2OjE4LDA1OSBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIxIDEyOjM2OjMwLDUzNCBbV29ya2VyLTExOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjEgMTY6NTc6NDcsMDYxIFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMSAxNjo1Nzo0NywwNjMgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjEgMTY6NTk6NDksMzU5IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTIxIDE2OjU5OjQ5LDM2MCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjEgMTc6MDA6MjMsMjIwIFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMSAxNzowMDoyMywyMjEgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjEgMTc6MjI6MjgsMTIzIFtXb3JrZXItNTE6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTIxIDE4OjEwOjEwLDk5NCBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjEgMTg6MTA6MTAsOTk2IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIxIDE4OjI3OjA4LDUwNCBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTIxIDE4OjM0OjQwLDExOCBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMSAxODozNDo0MCwxMTkgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMSAxODozOTowNywxMzIgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIxIDE4OjM5OjA3LDEzMyBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAwNzo1MDo0OSw3MDggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDA3OjUwOjU3LDAwMiBbV29ya2VyLTIyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMDc6NTA6NTcsMDAyIFtXb3JrZXItMjI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiAKKzIwMjAtMDQtMjIgMDc6NTE6MTMsNTM4IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAwNzo1MToyNCw3ODkgW1dvcmtlci0yMTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAwNzo1MToyNCw3ODkgW1dvcmtlci0yMTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDA5OjUzOjU4LDIyOSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMDk6NTM6NTgsMjI5IFtXb3JrZXItNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDA5OjU3OjUyLDcwNyBbV29ya2VyLTY6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA0LTIyIDA5OjU4OjI1LDIzOSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAwOTo1ODoyNSwyNDAgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAwOTo1OToyOSw0NjAgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMDk6NTk6MjksNDYwIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMTA6MDE6MDIsOTA1IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDEwOjAxOjAyLDkwNSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDEwOjAxOjQyLDgzOSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTIyIDEwOjAxOjQyLDgzOSBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yMiAxMDowMTo1OCw5NDkgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTA6MDE6NTgsOTQ5IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMTA6NTk6NDksNjQyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxMDo1OTo1NiwyNjggW1dvcmtlci0xMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxMDo1OTo1NiwyNjkgW1dvcmtlci0xMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDExOjQ0OjEzLDc5NSBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTE6NDQ6MTMsNzk1IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDExOjQ0OjMzLDY3OSBbV29ya2VyLTE3OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjIgMTE6NDU6MDksNTYzIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMjIgMTI6Mzg6NTIsNjkwIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxMjozOTowOSwxMDIgW1dvcmtlci0xNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxMjozOTowOSwxMDIgW1dvcmtlci0xNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDEzOjAyOjI4LDcwNyBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTM6MDI6MjgsNzA3IFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTIyIDE3OjAwOjQyLDgwNiBbV29ya2VyLTM3OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0yMiAxNzowMDo0Miw4MTkgW1dvcmtlci0zNzogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjAwOjQ4LDI5OSBbV29ya2VyLTM3OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB0ZXN0OlRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMjIgMTc6MDA6NDksOTM1IFtXb3JrZXItMzc6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxNzowMDo1MCwzNjUgW1dvcmtlci0zNzogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjCisyMDIwLTA0LTIyIDE3OjAwOjUwLDM2NSBbV29ya2VyLTM3OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvVGVzdHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL1Rlc3RzL3NyYworMjAyMC0wNC0yMiAxNzowMDo1MCw1NTIgW1dvcmtlci0zNzogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogNyBzZWMKKzIwMjAtMDQtMjIgMTc6MDE6NDUsODQ0IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzowMjowMCw4MjMgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL20yZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGkvMC4zLjEvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGktMC4zLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDEsMDcyIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL20yZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGkvMC4zLjEvb3JnLmVjbGlwc2UubTJlLndvcmtzcGFjZS5jbGktMC4zLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDEsNzM2IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWNsYXNzd29ybGRzLzIuNS4yL3BsZXh1cy1jbGFzc3dvcmxkcy0yLjUuMi1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowMiwxMjIgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jbGFzc3dvcmxkcy8yLjUuMi9wbGV4dXMtY2xhc3N3b3JsZHMtMi41LjItc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDIsNzE0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItdXRpbC8xLjEuMS9tYXZlbi1yZXNvbHZlci11dGlsLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAyLDg4MCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItdXRpbC8xLjEuMS9tYXZlbi1yZXNvbHZlci11dGlsLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAzLDM0MiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLW1vZGVsLzMuNS4zL21hdmVuLW1vZGVsLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjAzLDUwNSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tbW9kZWwvMy41LjMvbWF2ZW4tbW9kZWwtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDMsOTM2IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjUvY29tbW9ucy1pby0yLjUtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDQsMTQ0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1pby9jb21tb25zLWlvLzIuNS9jb21tb25zLWlvLTIuNS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNCw3MTkgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tbW9ucy1jbGkvY29tbW9ucy1jbGkvMS40L2NvbW1vbnMtY2xpLTEuNC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNCw5MTggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWNsaS9jb21tb25zLWNsaS8xLjQvY29tbW9ucy1jbGktMS40LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA1LDQ2OSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLWNvbm5lY3Rvci1iYXNpYy8xLjEuMS9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMtMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDUsNjI3IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1jb25uZWN0b3ItYmFzaWMvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItY29ubmVjdG9yLWJhc2ljLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA1LDk5OSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWNvcmUvMy41LjMvbWF2ZW4tY29yZS0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNiwyNzUgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWNvcmUvMy41LjMvbWF2ZW4tY29yZS0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjowNiw2ODkgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDYsODM4IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2NvZGVoYXVzL3BsZXh1cy9wbGV4dXMtaW50ZXJwb2xhdGlvbi8xLjI0L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuMjQtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDcsMjU3IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLXNlYy1kaXNwYXRjaGVyLzEuNC9wbGV4dXMtc2VjLWRpc3BhdGNoZXItMS40LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA3LDQ3OCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLXNlYy1kaXNwYXRjaGVyLzEuNC9wbGV4dXMtc2VjLWRpc3BhdGNoZXItMS40LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA4LDIyMCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvc29uYXR5cGUvcGxleHVzL3BsZXh1cy1jaXBoZXIvMS43L3BsZXh1cy1jaXBoZXItMS43LXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA4LDMyNCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9zb25hdHlwZS9wbGV4dXMvcGxleHVzLWNpcGhlci8xLjcvcGxleHVzLWNpcGhlci0xLjctc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDgsNzU1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci8zLjUuMy9tYXZlbi1zZXR0aW5ncy1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA5LDEyMiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MtYnVpbGRlci8zLjUuMy9tYXZlbi1zZXR0aW5ncy1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjA5LDQ0MSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWNvbXBhdC8zLjUuMy9tYXZlbi1jb21wYXQtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MDksNjM1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1jb21wYXQvMy41LjMvbWF2ZW4tY29tcGF0LTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjEwLDA1NyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWVtYmVkZGVyLzMuNS4zL21hdmVuLWVtYmVkZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjEwLDIwOCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tZW1iZWRkZXIvMy41LjMvbWF2ZW4tZW1iZWRkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTAsNjk1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2lvL3Rha2FyaS9hZXRoZXIvYWV0aGVyLWNvbm5lY3Rvci1va2h0dHAvMC4xNy4zL2FldGhlci1jb25uZWN0b3Itb2todHRwLTAuMTcuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxMCw4OTAgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9pby90YWthcmkvYWV0aGVyL2FldGhlci1jb25uZWN0b3Itb2todHRwLzAuMTcuMy9hZXRoZXItY29ubmVjdG9yLW9raHR0cC0wLjE3LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTEsNDcwIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2phdmF4L2VudGVycHJpc2UvY2RpLWFwaS8xLjAvY2RpLWFwaS0xLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTEsNjM0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvamF2YXgvZW50ZXJwcmlzZS9jZGktYXBpLzEuMC9jZGktYXBpLTEuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxMiwxODEgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3NxdWFyZXVwL29raW8vb2tpby8xLjEyLjAvb2tpby0xLjEyLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTIsMzIxIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3NxdWFyZXVwL29raW8vb2tpby8xLjEyLjAvb2tpby0xLjEyLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTIsODUwIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tc2V0dGluZ3MvMy41LjMvbWF2ZW4tc2V0dGluZ3MtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTMsMTE1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1zZXR0aW5ncy8zLjUuMy9tYXZlbi1zZXR0aW5ncy0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxMyw1NzggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3NxdWFyZXVwL29raHR0cDMvb2todHRwLzMuNy4wL29raHR0cC0zLjcuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxMyw4MDEgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vc3F1YXJldXAvb2todHRwMy9va2h0dHAvMy43LjAvb2todHRwLTMuNy4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE0LDE3OCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLWFwaS8xLjEuMS9tYXZlbi1yZXNvbHZlci1hcGktMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTQsMzc5IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1hcGkvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItYXBpLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE0LDgxMiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNCw5MzAgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy1jb21wb25lbnQtYW5ub3RhdGlvbnMvMS43LjEvcGxleHVzLWNvbXBvbmVudC1hbm5vdGF0aW9ucy0xLjcuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNSwzMTEgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1pbXBsLzEuMS4xL21hdmVuLXJlc29sdmVyLWltcGwtMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTUsNDc3IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1pbXBsLzEuMS4xL21hdmVuLXJlc29sdmVyLWltcGwtMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTUsOTAxIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vd2Fnb24vd2Fnb24tZmlsZS8zLjAuMC93YWdvbi1maWxlLTMuMC4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE1LDk3OCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vd2Fnb24vd2Fnb24tZmlsZS8zLjAuMC93YWdvbi1maWxlLTMuMC4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE2LDM5MyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLzMuNS4zL21hdmVuLXJlc29sdmVyLXByb3ZpZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE2LDcyNCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcmVzb2x2ZXItcHJvdmlkZXIvMy41LjMvbWF2ZW4tcmVzb2x2ZXItcHJvdmlkZXItMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTcsMDQxIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcmVzb2x2ZXIvbWF2ZW4tcmVzb2x2ZXItdHJhbnNwb3J0LXdhZ29uLzEuMS4xL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi0xLjEuMS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNywyMTcgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXRyYW5zcG9ydC13YWdvbi8xLjEuMS9tYXZlbi1yZXNvbHZlci10cmFuc3BvcnQtd2Fnb24tMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTcsNjU5IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9jb21tb25zLWxhbmczLzMuNS9jb21tb25zLWxhbmczLTMuNS1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoxNyw5NzUgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NvbW1vbnMvY29tbW9ucy1sYW5nMy8zLjUvY29tbW9ucy1sYW5nMy0zLjUtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTgsNDY3IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9nb29nbGUvZ3VhdmEvZ3VhdmEvMjAuMC9ndWF2YS0yMC4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE5LDAwMiBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbS9nb29nbGUvZ3VhdmEvZ3VhdmEvMjAuMC9ndWF2YS0yMC4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE5LDQzNyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3Jlc29sdmVyL21hdmVuLXJlc29sdmVyLXNwaS8xLjEuMS9tYXZlbi1yZXNvbHZlci1zcGktMS4xLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MTksNTYzIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9yZXNvbHZlci9tYXZlbi1yZXNvbHZlci1zcGkvMS4xLjEvbWF2ZW4tcmVzb2x2ZXItc3BpLTEuMS4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjE5LDg5OCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWFydGlmYWN0LzMuNS4zL21hdmVuLWFydGlmYWN0LTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIwLDAyMCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYXJ0aWZhY3QvMy41LjMvbWF2ZW4tYXJ0aWZhY3QtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjAsMzU0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzMuMS4wL3BsZXh1cy11dGlscy0zLjEuMC1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyMCw1NjQgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy11dGlscy8zLjEuMC9wbGV4dXMtdXRpbHMtMy4xLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjAsOTM5IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS8zLjUuMy9tYXZlbi1yZXBvc2l0b3J5LW1ldGFkYXRhLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIxLDEwOCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcmVwb3NpdG9yeS1tZXRhZGF0YS8zLjUuMy9tYXZlbi1yZXBvc2l0b3J5LW1ldGFkYXRhLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIxLDUxOSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3dhZ29uL3dhZ29uLXByb3ZpZGVyLWFwaS8zLjAuMC93YWdvbi1wcm92aWRlci1hcGktMy4wLjAtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjEsNzM0IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi93YWdvbi93YWdvbi1wcm92aWRlci1hcGkvMy4wLjAvd2Fnb24tcHJvdmlkZXItYXBpLTMuMC4wLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIyLDEzOSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLWJ1aWxkZXItc3VwcG9ydC8zLjUuMy9tYXZlbi1idWlsZGVyLXN1cHBvcnQtMy41LjMtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjIsMzA1IFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1idWlsZGVyLXN1cHBvcnQvMy41LjMvbWF2ZW4tYnVpbGRlci1zdXBwb3J0LTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIyLDY0MCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtdXRpbHMvMy4yLjEvbWF2ZW4tc2hhcmVkLXV0aWxzLTMuMi4xLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIyLDg5MyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC11dGlscy8zLjIuMS9tYXZlbi1zaGFyZWQtdXRpbHMtMy4yLjEtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjMsMzIzIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tbW9kZWwtYnVpbGRlci8zLjUuMy9tYXZlbi1tb2RlbC1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIzLDUxMyBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tbW9kZWwtYnVpbGRlci8zLjUuMy9tYXZlbi1tb2RlbC1idWlsZGVyLTMuNS4zLXNvdXJjZXMuamFyCisyMDIwLTA0LTIyIDE3OjAyOjIzLDkxNCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBsdWdpbi1hcGkvMy41LjMvbWF2ZW4tcGx1Z2luLWFwaS0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyNCwxOTggW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBsdWdpbi1hcGkvMy41LjMvbWF2ZW4tcGx1Z2luLWFwaS0zLjUuMy1zb3VyY2VzLmphcgorMjAyMC0wNC0yMiAxNzowMjoyNCw2MjMgW21haW5dIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NsZjRqL3NsZjRqLXNpbXBsZS8xLjcuNS9zbGY0ai1zaW1wbGUtMS43LjUtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDI6MjQsNzMyIFttYWluXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL3NsZjRqL3NsZjRqLXNpbXBsZS8xLjcuNS9zbGY0ai1zaW1wbGUtMS43LjUtc291cmNlcy5qYXIKKzIwMjAtMDQtMjIgMTc6MDQ6NDUsNzgyIFtXb3JrZXItMzY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6MDQ6NDUsNzgyIFtXb3JrZXItMzY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzoxMjowMCw0MDggW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjEyOjAwLDQ0MCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MTI6MDAsNDQyIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjEyOjAwLDQ0NSBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MTI6MDAsNDQ4IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjE1OjM2LDE2OCBbV29ya2VyLTQyOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjE1OjM2LDc3NyBbV29ya2VyLTQyOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogdGVzdDpUZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTIyIDE3OjE1OjM4LDA0NCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTc6MTU6MzgsMDQ5IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzoxNTozOCwwNTIgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxNzoxNTozOCwwNTQgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjE1OjM4LDA1NiBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjE1OjM4LDA5MiBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTIyIDE3OjE1OjM4LDA5MyBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yMiAxNzoxNTozOCwxMDMgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM6bWF2ZW4tY2xlYW4tcGx1Z2luOmphcjoyLjUgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDQtMjIgMTc6MTU6MzgsMTI4IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzoxNTo0MCw3OTkgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE3OjE1OjQwLDgwMyBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MTU6NDAsODA4IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6MTU6NDAsODEwIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzoxNTo0MCw4MTIgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxNzoxNzozNiw1MTEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjE4OjUzLDAzNCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjE4OjUzLDAzNCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTc6MjE6NTcsMTcyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzoyMjowNiw4MjcgW1dvcmtlci00NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzoyMjowNiw4MjcgW1dvcmtlci00NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBqYXIKKzIwMjAtMDQtMjIgMTc6MjM6MDEsNTM5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzoyMzowNSwwNTAgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzoyMzowNSwwNTAgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIyIDE3OjMyOjI4LDY0NyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTc6MzI6MjgsNjUwIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzozMjoyOCw2NTIgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6MzI6MjgsNjUzIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzozMjoyOCw2NTUgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6MzI6MjgsNzkwIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxNzozMjoyOCw3OTUgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjMyOjI4LDc5OCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjMyOjI4LDgwMCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTc6MzI6MjgsODAyIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTc6MzM6MTksMDAxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzozMzoyOCw4NDEgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzozMzoyOCw4NDEgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjM1OjIxLDY4OCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6MzU6MjUsNDE2IFtXb3JrZXItNDY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6MzU6MjUsNDE2IFtXb3JrZXItNDY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzozNzo0NCw1OTkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjM3OjQ4LDMyMCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzozNzo0OCwzMjAgW1dvcmtlci0zNzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDEwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzozODoxMSwwMzkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjM4OjE2LDA1NSBbV29ya2VyLTUwOiBMYXVuY2hpbmcgR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yMiAxNzozODoxNiwwNTYgW1dvcmtlci01MDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjM4OjMzLDI5MCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6Mzg6MzcsMzcyIFtXb3JrZXItNTI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjM4OjM3LDM3MyBbV29ya2VyLTUyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjQxOjIxLDc4MCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6NDE6MjYsMTkxIFtXb3JrZXItNTM6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjQxOjI2LDE5MSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjQyOjExLDAzNCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTc6NDI6MTEsMDM5IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxNzo0MjoxMSwwNDYgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxNzo0MjoxMSwwNDggW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE3OjQyOjExLDA1MCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE3OjQ4OjI1LDc4MiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6NDg6MjksODc1IFtXb3JrZXItNTU6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjQ4OjI5LDg3NSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjQ4OjU4LDIwMiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6NDk6MDEsNjY3IFtXb3JrZXItNTY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjQ5OjAxLDY2NyBbV29ya2VyLTU2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIyIDE3OjUxOjIxLDA3NiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6NTE6MjQsNTY4IFtXb3JrZXItNTU6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE3OjUxOjI0LDU2OSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE3OjUyOjIzLDQwOCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTc6NTI6MjgsNTc1IFtXb3JrZXItNTg6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yMiAxNzo1MjoyOCw1NzYgW1dvcmtlci01ODogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxNzo1MzowNyw0ODEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjUzOjExLDA1MyBbV29ya2VyLTYwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzo1MzoxMSwwNTQgW1dvcmtlci02MDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxNzo1NDowMiwyMjggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE3OjU0OjA1LDk1MyBbV29ya2VyLTYxOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjIgMTc6NTQ6MDUsOTU0IFtXb3JrZXItNjE6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjIgMTc6NTQ6MjYsMTIyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxNzo1NDo0NCw5MzUgW1dvcmtlci02MDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTc6NTQ6NDQsOTM1IFtXb3JrZXItNjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTc6NTk6MTgsNDYxIFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxNzo1OToxOCw0NjEgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMTg6MDA6MjUsMzc1IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTIyIDE4OjAwOjI1LDM3NSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMTg6MDE6MTksMzA0IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxODowMToxOSwzMDUgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjIgMTg6MDk6NDgsMzg3IFtXb3JrZXItNjQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yMiAxODoxMDoyOCw1NjQgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE4OjEwOjMyLDgwOSBbV29ya2VyLTY0OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjIgMTg6MTA6MzIsODA5IFtXb3JrZXItNjQ6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTg6MTE6MDIsNjkxIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTg6MTE6MDIsNjkxIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDQtMjIgMTg6MTE6MjQsMjIwIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxODoxMToyNyw2ODggW1dvcmtlci02NDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTg6MTE6MjcsNjg5IFtXb3JrZXItNjQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgxOCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMDk5IFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNC0yMiAxODoxMjowMiwxMDMgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE4OjEyOjAyLDEwNSBbV29ya2VyLTY0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxODoxMjowMiwxMDcgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE4OjEyOjAyLDEwOSBbV29ya2VyLTY0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxODoxMjowMiwyMjEgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE4OjEyOjAyLDI0NSBbV29ya2VyLTY0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMjYyIFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTg6MTI6MDIsMjY0IFtXb3JrZXItNjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxODoxMjowMiwyNjYgW1dvcmtlci02NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMiAxODoxMjoyOSw2NDEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE4OjEyOjM0LDQ1NCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMTkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxODoxMjozNCw0NTQgW1dvcmtlci02NTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDE5KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yMiAxODoxMzoyNiw5MzcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE4OjEzOjMwLDg2NSBbV29ya2VyLTY1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yMiAxODoxMzozMCw4NjYgW1dvcmtlci02NTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxODoyODozNSwxMzMgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE4OjI4OjM1LDE0MCBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTg6Mjg6MzUsMTQxIFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE4OjI4OjM1LDE0MyBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTg6Mjg6MzUsMTQ0IFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE4OjI4OjM1LDIyNiBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTg6Mjg6MzUsMjI5IFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxODoyODozNSwyMzAgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxODoyODozNSwyMzIgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE4OjI4OjM1LDIzMyBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE4OjI5OjI3LDMzMyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTg6Mjk6MzIsMzUxIFtXb3JrZXItNjY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIyIDE4OjI5OjMyLDM1MiBbV29ya2VyLTY2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIyIDE5OjAwOjQ5LDIyMiBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTk6MDA6NDksMjI3IFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOTowMDo0OSwyMzAgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTk6MDA6NDksMjMxIFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOTowMDo0OSwyMzMgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTk6MDE6NTIsNzM1IFtXb3JrZXItNjg6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTIyIDE5OjAxOjUyLDc1MSBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTk6MDE6NTIsOTc5IFtXb3JrZXItNjg6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yMiAxOTowMTo1NCwzNTMgW1dvcmtlci02ODogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjAxOjU0LDM1OCBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzMi9zcmMKKzIwMjAtMDQtMjIgMTk6MDE6NTQsMzU5IFtXb3JrZXItNjg6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzMi9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDIwLTA0LTIyIDE5OjAxOjU0LDgzOCBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBFUlJPUiBvLmUubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yIC0gVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzMgorb3JnLmVjbGlwc2UubTJlLnd0cC5NYXJrZWRFeGNlcHRpb246IFVuYWJsZSB0byBjb25maWd1cmUgR2xlbW1TZXJ2aWNlczIKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5OSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IuY29uZmlndXJlKFdUUFByb2plY3RDb25maWd1cmF0b3IuamF2YTo2OCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5wcm9qZWN0LmNvbmZpZ3VyYXRvci5BYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuY29uZmlndXJlKEFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5qYXZhOjEyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDgpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbjAoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NDM5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMi5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjM1MikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDIuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjM0OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLlVwZGF0ZU1hdmVuUHJvamVjdEpvYi5ydW5JbldvcmtzcGFjZShVcGRhdGVNYXZlblByb2plY3RKb2IuamF2YTo3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KSBbb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogT25lIG9yIG1vcmUgY29uc3RyYWludHMgaGF2ZSBub3QgYmVlbiBzYXRpc2ZpZWQuCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5SW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YTozNjMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubWVyZ2VDaGFuZ2VzSW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YToxMTgxKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0LmFjY2VzcyQyKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTExNykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdCQxLnJ1bihGYWNldGVkUHJvamVjdC5qYXZhOjMyNCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnkoRmFjZXRlZFByb2plY3QuamF2YTozMzkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlKFdlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjEzNikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5NSkgfltuYTpuYV0KKwkuLi4gMTggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTIyIDE5OjAxOjU1LDA1MSBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTIyIDE5OjAxOjU1LDA1NiBbV29ya2VyLTY4OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAyIHNlYworMjAyMC0wNC0yMiAxOToxODozMiwzODcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE5OjE4OjM4LDE5NyBbV29ya2VyLTY0OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjIgMTk6MTg6MzgsMTk3IFtXb3JrZXItNjQ6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjIgMTk6MjU6MTksOTc1IFtXb3JrZXItNTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMjIgMTk6MjU6MzQsNDQ2IFtXb3JrZXItMjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiB0ZXN0OlRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDQtMjIgMTk6MjY6MTEsMTM5IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOToyNjoxMSwxNDEgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTk6MjY6MTEsMTQ0IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOToyNjoxMSwxNDYgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTk6MjY6MTEsNDE4IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOToyNjoxMSw0MjMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMiAxOToyNjoxMSw0MjYgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIyIDE5OjI2OjExLDQyOCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIyIDE5OjI2OjQ3LDkzOCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTk6MjY6NTMsMzcwIFtXb3JrZXItNjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjIgMTk6MjY6NTMsMzcxIFtXb3JrZXItNjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDIyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxOTo0ODo1MywwMTEgW1dvcmtlci0xMzogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTk6NDg6NTMsMTQyIFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogSnNvblRyYXZlcnNlOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDQtMjIgMTk6NDg6NTMsODU1IFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjQ4OjUzLDg3NyBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0pzb25UcmF2ZXJzZS9zcmMKKzIwMjAtMDQtMjIgMTk6NDg6NTMsODc4IFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0pzb25UcmF2ZXJzZS9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvSnNvblRyYXZlcnNlL3NyYworMjAyMC0wNC0yMiAxOTo0ODo1NCwwNzIgW1dvcmtlci0xMzogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNC0yMiAxOTo0ODo1NCwwNzMgW1dvcmtlci0xMzogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDQtMjIgMTk6NDg6NTQsMjAwIFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogSnNvblRyYXZlcnNlOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDQtMjIgMTk6NDg6NTQsMzQwIFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjQ4OjU0LDM1NyBbV29ya2VyLTEzOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0pzb25UcmF2ZXJzZS9zcmMKKzIwMjAtMDQtMjIgMTk6NDg6NTQsMzU3IFtXb3JrZXItMTM6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0pzb25UcmF2ZXJzZS9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvSnNvblRyYXZlcnNlL3NyYworMjAyMC0wNC0yMiAxOTo0ODo1NCw1MDYgW1dvcmtlci0xMzogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAwIHNlYworMjAyMC0wNC0yMiAxOTo0OToxOSw0MzUgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIyIDE5OjQ5OjMyLDk3OSBbV29ya2VyLTE2OiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTIyIDE5OjQ5OjMyLDk3OSBbV29ya2VyLTE2OiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE5OjUxOjE1LDM1OCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTk6NTE6NDgsMzQyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMiAxOTo1MTo1OSwxMzAgW1dvcmtlci0xMzogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZSAoMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMjIgMTk6NTE6NTksMTMxIFtXb3JrZXItMTM6IExhdW5jaGluZyBKc29uVHJhdmVyc2UgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTIyIDE5OjU0OjE1LDE0MyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjIgMTk6NTQ6MjAsNzE1IFtXb3JrZXItMTU6IExhdW5jaGluZyBKc29uVHJhdmVyc2UgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTIyIDE5OjU0OjIwLDcxNiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yMiAxOTo1NDo0NSw0NzIgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA0LTIyIDE5OjU0OjQ1LDQ3NyBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjIgMTk6NTQ6NDUsNDc4IFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjIgMTk6NTQ6NDUsNDgwIFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMiAxOTo1NDo0NSw0ODIgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yMyAwNzo1OTo1MywwNTIgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNC0yMyAwODowODozNywwOTAgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTIzIDA4OjA4OjQyLDIwNCBbV29ya2VyLTI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIzIDA4OjA4OjQyLDIwNiBbV29ya2VyLTI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjMgMDg6MTY6MzUsNjUyIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IEpzb25UcmF2ZXJzZTpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA0LTIzIDA4OjE2OjM3LDE2MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjMgMDg6MTY6MzcsMTYyIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMyAwODoxNjozNywxNjUgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjE2OjM3LDE2NyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6MTY6MzcsNDU5IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODoxNjozNyw0NjEgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMyAwODoxNjozNyw0NjMgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjE2OjM3LDQ2NSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIzIDA4OjM2OjUxLDAxNyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjMgMDg6MzY6NTEsMDIwIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMyAwODozNjo1MSwwMjQgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjM2OjUxLDA0MiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6Mzc6MDMsODE0IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yMyAwODozNzoxOSw1MTMgW1dvcmtlci0xNjogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZSAoNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMjMgMDg6Mzc6MTksNTEzIFtXb3JrZXItMTY6IExhdW5jaGluZyBKc29uVHJhdmVyc2UgKDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIzIDA4OjM3OjM3LDMxMiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjMgMDg6Mzc6MzcsMzE0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMyAwODozNzozNywzMTYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjM3OjM3LDMxOCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDg6Mzc6MzcsMzc5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yMyAwODozNzozNywzODEgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMyAwODozNzozNywzODMgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjM3OjM3LDM4NSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTIzIDA4OjM4OjI0LDc0MyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjMgMDg6Mzg6MjksMDAzIFtXb3JrZXItMjE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTIzIDA4OjM4OjI5LDAwMyBbV29ya2VyLTIxOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTIzIDA4OjQzOjUyLDgwOSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjMgMDg6NDM6NTIsODEwIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yMyAwODo0Mzo1Miw4MTIgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTIzIDA4OjQzOjUyLDgxNCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjMgMDk6MzE6NTIsNjY3IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMjMgMTg6Mzk6NDcsNTE4IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8yLjIvbWF2ZW4td2FyLXBsdWdpbi0yLjIuamFyCisyMDIwLTA0LTIzIDE4OjM5OjQ3LDgwMCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvbWF2ZW4td2FyLXBsdWdpbi8yLjIvbWF2ZW4td2FyLXBsdWdpbi0yLjIuamFyCisyMDIwLTA0LTIzIDE4OjM5OjUxLDQ0MCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IHdmb3JtU2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yMyAxODozOTo1MSw4NzggW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi13YXItcGx1Z2luLzIuMi9tYXZlbi13YXItcGx1Z2luLTIuMi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTEsOTU2IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9tYXZlbi13YXItcGx1Z2luLzIuMi9tYXZlbi13YXItcGx1Z2luLTIuMi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTIsODQ2IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjMuMS94c3RyZWFtLTEuMy4xLnBvbQorMjAyMC0wNC0yMyAxODozOTo1Miw5MDkgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS4zLjEveHN0cmVhbS0xLjMuMS5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTIsOTU2IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS1wYXJlbnQvMS4zLjEveHN0cmVhbS1wYXJlbnQtMS4zLjEucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDAxOCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS1wYXJlbnQvMS4zLjEveHN0cmVhbS1wYXJlbnQtMS4zLjEucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDE1OSBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGluZyBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9zaGFyZWQvbWF2ZW4tZmlsdGVyaW5nLzEuMC1iZXRhLTIvbWF2ZW4tZmlsdGVyaW5nLTEuMC1iZXRhLTIucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDIyMSBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1maWx0ZXJpbmcvMS4wLWJldGEtMi9tYXZlbi1maWx0ZXJpbmctMS4wLWJldGEtMi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsMjg0IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy8xMC9tYXZlbi1zaGFyZWQtY29tcG9uZW50cy0xMC5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsMzYyIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLzEwL21hdmVuLXNoYXJlZC1jb21wb25lbnRzLTEwLnBvbQorMjAyMC0wNC0yMyAxODozOTo1Myw0NDAgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tcGFyZW50LzkvbWF2ZW4tcGFyZW50LTkucG9tCisyMDIwLTA0LTIzIDE4OjM5OjUzLDUzNCBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL21hdmVuLXBhcmVudC85L21hdmVuLXBhcmVudC05LnBvbQorMjAyMC0wNC0yMyAxODozOTo1Myw2MTIgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzEuNS42L3BsZXh1cy11dGlscy0xLjUuNi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsNjkwIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLXV0aWxzLzEuNS42L3BsZXh1cy11dGlscy0xLjUuNi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsNzUzIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvY29kZWhhdXMvcGxleHVzL3BsZXh1cy8xLjAuMTIvcGxleHVzLTEuMC4xMi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTMsODYyIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLzEuMC4xMi9wbGV4dXMtMS4wLjEyLnBvbQorMjAyMC0wNC0yMyAxODozOTo1Myw5NDAgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS42L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuNi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTQsMDE4IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9jb2RlaGF1cy9wbGV4dXMvcGxleHVzLWludGVycG9sYXRpb24vMS42L3BsZXh1cy1pbnRlcnBvbGF0aW9uLTEuNi5wb20KKzIwMjAtMDQtMjMgMTg6Mzk6NTQsMTkwIFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb20vdGhvdWdodHdvcmtzL3hzdHJlYW0veHN0cmVhbS8xLjMuMS94c3RyZWFtLTEuMy4xLmphcgorMjAyMC0wNC0yMyAxODozOTo1NCwzOTMgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvY29tL3Rob3VnaHR3b3Jrcy94c3RyZWFtL3hzdHJlYW0vMS4zLjEveHN0cmVhbS0xLjMuMS5qYXIKKzIwMjAtMDQtMjMgMTg6Mzk6NTQsNDI0IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL3NoYXJlZC9tYXZlbi1maWx0ZXJpbmcvMS4wLWJldGEtMi9tYXZlbi1maWx0ZXJpbmctMS4wLWJldGEtMi5qYXIKKzIwMjAtMDQtMjMgMTg6Mzk6NTQsNTk2IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vc2hhcmVkL21hdmVuLWZpbHRlcmluZy8xLjAtYmV0YS0yL21hdmVuLWZpbHRlcmluZy0xLjAtYmV0YS0yLmphcgorMjAyMC0wNC0yMyAxODozOTo1Niw2NTIgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VzL3NyYworMjAyMC0wNC0yMyAxODozOTo1Niw2NTIgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjAtMDQtMjMgMTg6Mzk6NTcsNjg2IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDQtMjMgMTg6Mzk6NTgsMzI3IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogd2Zvcm1TZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTIzIDE4OjM5OjU5LDQzNiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjCisyMDIwLTA0LTIzIDE4OjM5OjU5LDQzNiBbV29ya2VyLTQxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC93Zm9ybVNlcnZpY2VzL3NyYworMjAyMC0wNC0yMyAxODozOTo1OSw3MTcgW1dvcmtlci00MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjMgMTg6Mzk6NTksNzE3IFtXb3JrZXItNDE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMiBzZWMKKzIwMjAtMDQtMjQgMDg6MzA6MTgsMjExIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMjQgMTA6MTM6MTYsMTM0IFtXb3JrZXItMTk6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yNCAxMDoyMDoxOSw2MzIgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogd2Zvcm1TZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTI0IDEwOjIwOjIyLDMwNCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTA6MjA6MjIsMzA0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDEwOjIwOjIyLDMwNCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTA6MjA6MjIsMzA0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDExOjQxOjQ1LDYyOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTE6NDE6NDUsNjI4IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxMTo0MTo0NSw2NDMgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDExOjQxOjQ1LDY0MyBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTE6NDE6NDYsMzE1IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxMTo0MTo0NiwzMTUgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTE6NDE6NDYsMzE1IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxMTo0MTo0NiwzMTUgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTE6NDE6NTUsOTQ2IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc193c3AtS29yQVAtU2VydmljZXNfd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDExOjQxOjU1LDk0NiBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd3NwLUtvckFQLVNlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTU6MTQ6NDIsNDI3IFtXb3JrZXItMjk6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogVXRpbHM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTU6MTQ6NDMsMDA1IFtXb3JrZXItMjk6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvVXRpbHMvc3JjCisyMDIwLTA0LTI0IDE1OjE0OjQzLDAwNSBbV29ya2VyLTI5OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9VdGlscy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvVXRpbHMvc3JjCisyMDIwLTA0LTI0IDE1OjE0OjQzLDIzOSBbV29ya2VyLTI5OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTI0IDE1OjE0OjQzLDMzMyBbV29ya2VyLTI5OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IFV0aWxzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE1OjE0OjQzLDU4MyBbV29ya2VyLTI5OiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL1V0aWxzL3NyYworMjAyMC0wNC0yNCAxNToxNDo0Myw1ODMgW1dvcmtlci0yOTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvVXRpbHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL1V0aWxzL3NyYworMjAyMC0wNC0yNCAxNToxNDo0Myw2NTkgW1dvcmtlci0yOTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAwIHNlYworMjAyMC0wNC0yNCAxNToxNjoyNywxNTEgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE1OjE2OjI3LDE2NiBbV29ya2VyLTMwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNToxNjoyNywxNjYgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE1OjE2OjI3LDE2NiBbV29ya2VyLTMwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNToxNjo1NCw5ODcgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDQtMjQgMTU6MTY6NTQsOTg3IFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxNTo0MzoyMCwyMjAgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogVXRpbHM6ZGUua29yYXAuc2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTU6NDM6MjAsNjg5IFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNTo0MzoyMCw2ODkgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTU6NDM6MjAsNjg5IFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNTo0MzoyMCw3MjAgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTU6NDk6MDIsMTk0IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA0LTI0IDE1OjQ5OjAyLDE5NCBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTU6NDk6NTYsNDM5IFttYWluXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTY6MDI6NDQsNzEwIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjowMjo0NCw3MTAgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MDI6NDQsNzEwIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjowMjo0NCw3MTAgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MDY6NTUsNDk2IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE2OjA2OjU1LDkxNyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDY6NTUsOTE3IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjA2OjU1LDkxNyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDY6NTUsOTE3IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjA3OjE0LDM0MSBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNC0yNCAxNjowNzoxNCwzNDEgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE2OjA5OjI3LDkzNiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDk6MjcsOTM2IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjA5OjI3LDk1MSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDk6MjcsOTUxIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjA5OjI4LDYzOSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE2OjA5OjI4LDkwNSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MDk6MjgsOTA1IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MDk6MjgsOTA1IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjowOToyOCw5MDUgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjowOTozMyw5MjQgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI0IDE2OjA5OjMzLDkyNCBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxNjoxMToyOSwyMjcgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW06R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTY6MTE6MjksNjAyIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoxMToyOSw2MDIgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MTE6MjksNjAyIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoxMToyOSw2MDIgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MTE6MzMsOTI1IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI0IDE2OjExOjMzLDkyNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTY6MTg6NTksNzM3IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMjQgMTY6MTg6NTksNzM3IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTY6MjE6NDgsNDQ3IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyMTo0OCw0NDcgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjE6NDgsNDQ3IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyMTo0OCw0NjMgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjE6NTMsMzAyIFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA0LTI0IDE2OjIxOjUzLDMwMiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTY6MjU6NDEsMjA1IFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA0LTI0IDE2OjI1OjQxLDU0OCBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjU6NDEsNTQ4IFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjoyNTo0MSw1NDggW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjI1OjQxLDU0OCBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjU6NDEsODYxIFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyNTo0MSw4NjEgW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjU6NDEsODYxIFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyNTo0MSw4NjEgW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsMjMxIFtXb3JrZXItNDI6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE2OjI2OjMyLDM4OCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MjY6MzIsMzg4IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjoyNjozMiwzODggW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjI2OjMyLDM4OCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyNjozMiw0NjYgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjoyNjozMiw0NjYgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3c3AtS29yQVAtU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTY6MjY6MzIsNDY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNjoyNjozMiw0NjYgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNjoyNjozMiw0OTcgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjMyOjA5LDU3MSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MzI6MDksNTcxIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjMyOjA5LDU3MSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MzI6MDksNTcxIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjMyOjA5LDY2NCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MzI6MDksNjY0IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjMyOjA5LDY2NCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6MzI6MDksNjY0IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjM4OjEyLDQzMCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM1MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6Mzg6MTMsMzUyIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM1MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTY6Mzg6MTMsMzUyIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd3NwLUtvckFQLVNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE2OjM4OjEzLDM1MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTY6Mzg6MTMsMzUyIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTY6Mzg6MTMsMzY4IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNjo1MDo0MSw0MTggW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjUwOjQxLDQxOCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjo1MDo0MSw0MTggW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjUwOjQxLDQxOCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNjo1MDo1MCw4NzkgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI0IDE2OjUwOjU1LDExMCBbV29ya2VyLTQ5OiBMYXVuY2hpbmcgd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE2OjUwOjU1LDExMCBbV29ya2VyLTQ5OiBMYXVuY2hpbmcgd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxNjo1NDoyMCw0OTggW1dvcmtlci01MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjU0OjIwLDQ5OCBbV29ya2VyLTUxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNjo1NDoyMCw0OTggW1dvcmtlci01MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE2OjU0OjIwLDQ5OCBbV29ya2VyLTUxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoxMzowNywwNjAgW1dvcmtlci01MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjQgMTc6MTM6MDksNTI5IFtXb3JrZXItNTE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjAtMDQtMjQgMTc6MTM6MDksNTI5IFtXb3JrZXItNTE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3dmb3JtU2VydmljZXMvc3JjCisyMDIwLTA0LTI0IDE3OjEzOjEwLDE4NSBbV29ya2VyLTUxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA0LTI0IDE3OjEzOjEwLDcxMiBbV29ya2VyLTUxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNzoxMzoxMSw4ODQgW1dvcmtlci01MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC93Zm9ybVNlcnZpY2VzL3NyYworMjAyMC0wNC0yNCAxNzoxMzoxMSw4ODQgW1dvcmtlci01MTogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjAtMDQtMjQgMTc6MTM6MTIsMTgxIFtXb3JrZXItNTE6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjEzOjEyLDE5NyBbV29ya2VyLTUxOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDIgc2VjCisyMDIwLTA0LTI0IDE3OjE0OjE2LDc0OSBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTQ6MTYsNzY0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTQ6MTYsNzY0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoxNDoxNiw3NjQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoxNDoxNiw3NjQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjE0OjE2LDc2NCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjE0OjE2LDc4MCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTY6NDQsNzgxIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yNCAxNzoxNjo0NSw1NzggW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE2OjQ1LDU5NCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjE2OjQ1LDU5NCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTY6NDUsNTk0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTY6NDUsNTk0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxNjo0NSw1OTQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxNjo0NSw1OTQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE5OjIwLDY4MyBbV29ya2VyLTU0OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxNzoxOToyMCw4NTUgW1dvcmtlci01NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdzcC1Lb3JBUC1TZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzLXdyb25nXHBvbS54bWwuCisyMDIwLTA0LTI0IDE3OjE5OjIxLDQwMiBbV29ya2VyLTU0OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcy13cm9uZworMjAyMC0wNC0yNCAxNzoxOToyMSw0OTYgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjE5OjIxLDUxMiBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTk6MjEsNTEyIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoxOToyMSw1MTIgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjE5OjIxLDkwMiBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MTk6MjEsOTE4IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MTk6MjEsOTE4IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoxOToyMSw5MTggW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoxOToyMSw5MTggW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjE5OjIxLDkxOCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjE5OjIxLDkzMyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6MjI6MTYsMjczIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoyMjoxNiwyODkgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MjI6MTYsMjg5IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoyMjoxNiwyODkgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6MjI6MTYsNDE0IFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoyMjoxNiw0MTQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoyMjoxNiw0MTQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE3OjIyOjE2LDQxNCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE3OjIyOjMwLDI4NSBbV29ya2VyLTU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTc6MjI6MzAsMjg1IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc193Zm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI0IDE3OjI3OjE5LDAzNCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTc6Mjc6MTksMDUwIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTc6Mjc6MTksMDUwIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxNzoyNzoxOSwwNTAgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxNzoyNzoyNiwyNzEgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjI3OjI2LDI3MSBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxNzozODowNywyMzQgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1x3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE3OjM4OjA3LDI0OSBbV29ya2VyLTYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfd2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxODowMDo1MCw1NTYgW1dvcmtlci02MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA0LTI0IDE4OjAwOjUwLDkwMCBbV29ya2VyLTYwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6MDA6NTAsOTAwIFtXb3JrZXItNjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxODowMDo1MCw5MTYgW1dvcmtlci02MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjAwOjUwLDkxNiBbV29ya2VyLTYwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6MDE6MDQsNTE0IFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMjQgMTg6MDE6MDQsNTE0IFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTg6MDU6MjUsMTMyIFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc193Zm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcd2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxODowNToyNSwxMzIgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX3dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTg6MDc6MjksNDk0IFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxODowNzoyOSw0OTQgW1dvcmtlci02MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNjkwIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODowODo1MCw2OTAgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNjkwIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODowODo1MCw2OTAgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNzY5IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODowODo1MCw3NjkgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjA4OjUwLDc2OSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6MDg6NTAsNzY5IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxODowODo1MCw4MzEgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjA4OjUwLDgzMSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE4OjA4OjUwLDgzMSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6MDg6NTAsODMxIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6MDg6NTksMzc1IFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxODowODo1OSwzNzUgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTg6NTU6MTgsNjk4IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMjQgMTg6NTc6MDEsMDYxIFtXb3JrZXItNTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTI0IDE4OjU3OjIxLDQ3NyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxODo1NzoyMSw0NzcgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxODo1NzoyMSw0NzcgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTg6NTc6MjEsNDc3IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6NTc6MjIsMzA1IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjU3OjIyLDMwNSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6NTc6MjIsMzA1IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjU3OjIyLDMyMSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6NTc6MjQsMzgzIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjU3OjI0LDM4MyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTg6NTc6MjQsMzgzIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE4OjU3OjI0LDM4MyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6MzQ6MjYsNDc3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTozNDozMSwxOTkgW1dvcmtlci0yMzogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTk6MzQ6MzEsMjE1IFtXb3JrZXItMjM6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjQgMTk6Mzc6MDQsMDM4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTozNzowNCwwNTMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxOTozNzowNCwwNTMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjM3OjA0LDA1MyBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjM3OjA0LDE3OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6Mzc6MDQsMTc4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6Mzc6MDQsMTc4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTozNzowNCwxNzggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxOTozNzoxMSwwMzcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI0IDE5OjM3OjE1LDEwMSBbV29ya2VyLTIwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTozNzoxNSwxMDEgW1dvcmtlci0yMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxOTo0MzoxMyw5MzYgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI0IDE5OjQzOjEzLDkzNiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yNCAxOTo0NDowNSw5MTcgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI0IDE5OjQ0OjA5LDM3MCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTo0NDowOSwzNzAgW1dvcmtlci0yODogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxOTo0NDozMCw2NDIgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjQ0OjMwLDY0MiBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjQ0OjMwLDY1NyBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NDQ6MzAsNjU3IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NDQ6MzYsMzkyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTo0NDo0MSw5NjEgW1dvcmtlci0yMDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDI4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjQgMTk6NDQ6NDEsOTYxIFtXb3JrZXItMjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyOCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDQtMjQgMTk6NDU6MTcsNTE2IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTo0NToxNyw1MTYgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjQgMTk6NDU6MzQsMTQ1IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjQ1OjM0LDE0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NDU6MzQsMTQ1IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjQ1OjM0LDE0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NDg6NDIsODE2IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTo0ODo0Nyw0MDEgW1dvcmtlci0yODogTGF1bmNoaW5nIFdmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE5OjQ4OjQ3LDQwMSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yNCAxOTo1MDowMSw3ODAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUwOjAxLDc4MCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjUwOjAxLDc4MCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTA6MDEsNzgwIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTA6MTAsNTE0IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTo1MDoxMyw2NTEgW1dvcmtlci0yODogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxOTo1MDoxMyw2NTEgW1dvcmtlci0yODogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTI0IDE5OjUyOjQwLDg2OCBbV29ya2VyLTI2OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA0LTI0IDE5OjUyOjQxLDAyNCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMDQwIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo1Mjo0MSwwNDAgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUyOjQxLDA1NiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMTgxIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1Mjo0MSwxOTYgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo1Mjo0MSwyMTIgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUyOjQxLDIyOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjUyOjQxLDIyOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMjI4IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjQgMTk6NTI6NDEsMzM3IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1Mjo0MSw1NDAgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI0IDE5OjUyOjQxLDU1NiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI0IDE5OjUyOjQxLDU1NiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTI6NDEsNTU2IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTI6NTAsODgzIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNCAxOTo1Mjo1Myw3NDIgW1dvcmtlci0zMjogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNCAxOTo1Mjo1Myw3NDIgW1dvcmtlci0zMjogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTI0IDE5OjUzOjIxLDI2MSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6NTM6MjQsMTY3IFtXb3JrZXItMjI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgyOSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI0IDE5OjUzOjI0LDE2NyBbV29ya2VyLTIyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMjkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTI0IDE5OjUzOjQwLDUxNyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjQgMTk6NTM6NDMsNDU0IFtXb3JrZXItMzI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzMCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI0IDE5OjUzOjQzLDQ3MCBbV29ya2VyLTMyOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI0IDE5OjU4OjUzLDM0OSBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMTk6NTg6NTMsMzQ5IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjQgMTk6NTg6NTMsMzQ5IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNCAxOTo1ODo1MywzNDkgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNCAxOTo1OToxOSwzMzYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI0IDE5OjU5OjIyLDc3MyBbV29ya2VyLTM1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNCAxOTo1OToyMiw3NzMgW1dvcmtlci0zNTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNCAyMToxNDo1NSw3MzIgW1dvcmtlci02MTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMjE6MTQ6NTUsNzMyIFtXb3JrZXItNjE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNCAyMToxNDo1NSw3MzIgW1dvcmtlci02MTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjQgMjE6MTQ6NTUsNzQ4IFtXb3JrZXItNjE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxMTo1ODoyMCw4MTQgW1dvcmtlci0yMzogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMjcgMTI6MjM6MTQsMzM3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxMjoyMzoxOCw1MDAgW1dvcmtlci0yNjogTGF1bmNoaW5nIFV0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDQtMjcgMTI6MjM6MTgsNTAzIFtXb3JrZXItMjY6IExhdW5jaGluZyBVdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNyAxNjowODoxOCwyMDIgW1dvcmtlci01NTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTI3IDE2OjE0OjQ2LDYzMyBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNC0yNyAxNjoxNDo0NywxMTUgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi5wb20KKzIwMjAtMDQtMjcgMTY6MTQ6NDcsMTI0IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3Igb3JnLmFwYWNoZS5jb21tb25zLmlvOmNvbW1vbnMtaW86amFyOjIuNiBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNC0yNyAxNjoxNDo0NywxNjMgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi5qYXIKKzIwMjAtMDQtMjcgMTY6MTQ6NDksNDYzIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNjoxNDo0OSw0NjUgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTY6MTQ6NDksNDY3IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNjoxNDo0OSw0NjggW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTY6MTQ6NTAsMDExIFtXb3JrZXItNjI6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3Igb3JnLmFwYWNoZS5jb21tb25zLmlvOmNvbW1vbnMtaW86amFyOjIuNiBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNC0yNyAxNjoxNDo1MCwzNDEgW1dvcmtlci02MjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvY29tbW9ucy9pby9jb21tb25zLWlvLzIuNi9jb21tb25zLWlvLTIuNi1zb3VyY2VzLmphcgorMjAyMC0wNC0yNyAxNjoxNDo1MCwzNzUgW1dvcmtlci02MjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3Igb3JnLmFwYWNoZS5jb21tb25zLmlvOmNvbW1vbnMtaW86Mi42CitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3Qgb3JnLmFwYWNoZS5jb21tb25zLmlvOmNvbW1vbnMtaW86amFyOnNvdXJjZXM6Mi42CisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA0LTI3IDE2OjI5OjIzLDEwNSBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTY6Mjk6MjMsMTA2IFtXb3JrZXItNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE2OjI5OjIzLDEwOCBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTY6Mjk6MjMsMTIzIFtXb3JrZXItNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE2OjMyOjE3LDk3OCBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNC0yNyAxNjozMjoxOCwzMzMgW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkaW5nIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi42L2NvbW1vbnMtaW8tMi42LmphcgorMjAyMC0wNC0yNyAxNjozMjoxOCw1NDUgW1dvcmtlci02NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjYvY29tbW9ucy1pby0yLjYuamFyCisyMDIwLTA0LTI3IDE2OjMyOjE5LDMwOSBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTY6MzI6MTksMzExIFtXb3JrZXItNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE2OjMyOjE5LDMxNSBbV29ya2VyLTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTY6MzI6MTksMzE3IFtXb3JrZXItNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE2OjMyOjIwLDI2OSBbV29ya2VyLTY4OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRpbmcgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2NvbW1vbnMtaW8vY29tbW9ucy1pby8yLjYvY29tbW9ucy1pby0yLjYtc291cmNlcy5qYXIKKzIwMjAtMDQtMjcgMTY6MzI6MjAsNDcxIFtXb3JrZXItNjg6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5lLkFic3RyYWN0VHJhbnNmZXJMaXN0ZW5lckFkYXB0ZXIgLSBEb3dubG9hZGVkIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9jb21tb25zLWlvL2NvbW1vbnMtaW8vMi42L2NvbW1vbnMtaW8tMi42LXNvdXJjZXMuamFyCisyMDIwLTA0LTI3IDE2OjMyOjIwLDY1NyBbV29ya2VyLTY4OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIERvd25sb2FkZWQgc291cmNlcyBmb3IgY29tbW9ucy1pbzpjb21tb25zLWlvOjIuNgorMjAyMC0wNC0yNyAxNjozMzoyMCw4NjkgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE2OjMzOjIwLDg3MCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxNjozMzoyMCw4NzIgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE2OjMzOjIwLDg3NCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNzoxOTowOCw5MDUgW1dvcmtlci04MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjE5OjA4LDkwNiBbV29ya2VyLTgyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxNzoxOTowOCw5MDggW1dvcmtlci04MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjE5OjA4LDkxMCBbV29ya2VyLTgyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNzozODo0Niw5NzUgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjM4OjQ2LDk3NyBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxNzozODo0Niw5NzkgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjM4OjQ2LDk4MCBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNzo0MjoxNiwwMzUgW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjQyOjE2LDAzNyBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6NDI6MTYsMDM5IFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzo0MjoxNiwwNDAgW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE3OjQyOjE3LDIxOCBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTc6NDI6MTcsMjIwIFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6NDI6MTcsMjIzIFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxNzo0MjoxNywyMjUgW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxNzo0MjoyMSwwNDggW1dvcmtlci05MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE3OjQyOjIxLDA1MCBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE3OjQyOjIxLDA1MyBbV29ya2VyLTkyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTc6NDI6MjEsMDU2IFtXb3JrZXItOTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTc6NDI6MzAsMjU3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxNzo0MjozMiw5MjcgW1dvcmtlci05MjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjcgMTc6NDI6MzIsOTI4IFtXb3JrZXItOTI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzMildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTg6MTM6MTQsODA3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxODoxMzoxOCwxODEgW1dvcmtlci0xMTE6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNyAxODoxMzoxOCwxODEgW1dvcmtlci0xMTE6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI3IDE4OjE4OjAyLDM5NSBbV29ya2VyLTExMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjE4OjAyLDQxMiBbV29ya2VyLTExMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxODoxODowMiw0MTkgW1dvcmtlci0xMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODoxODowMiw0MjEgW1dvcmtlci0xMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6MjU6MTAsOTQxIFtXb3JrZXItMTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6MjU6MTAsOTQyIFtXb3JrZXItMTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjI1OjEwLDk0NCBbV29ya2VyLTExODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjI1OjEwLDk0NiBbV29ya2VyLTExODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxODoyNToxNywzNzUgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI3IDE4OjI1OjE5LDcxMyBbV29ya2VyLTExNjogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yNyAxODoyNToxOSw3MTMgW1dvcmtlci0xMTY6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICgzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNyAxODoyNjo1NCwzMjEgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI3IDE4OjI2OjU4LDAwMiBbV29ya2VyLTExMTogTGF1bmNoaW5nIEpzb25UcmF2ZXJzZSAoNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMjcgMTg6MjY6NTgsMDAyIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgSnNvblRyYXZlcnNlICg1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNyAxODoyNzoxMSwzNDIgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI3IDE4OjI3OjEzLDgxNiBbV29ya2VyLTExOTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDMzKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjcgMTg6Mjc6MTMsODE2IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA0LTI3IDE4OjI3OjI4LDkxOSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjcgMTg6Mjc6MzEsNTgzIFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yNyAxODoyNzozMSw1ODMgW1dvcmtlci0xMjA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzNCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjcgMTg6Mjg6MjIsMjk0IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODoyODoyMiwyOTYgW1dvcmtlci0xMTk6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxODoyODoyMiwyOTggW1dvcmtlci0xMTk6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjI4OjIyLDMwMSBbV29ya2VyLTExOTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjU1OjQ5LDI2NyBbV29ya2VyLTEyMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjU1OjQ5LDI2OSBbV29ya2VyLTEyMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6NTU6NDksMjcxIFtXb3JrZXItMTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6NTU6NDksMjcyIFtXb3JrZXItMTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yNyAxODo1NTo0OSwzNDUgW1dvcmtlci0xMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODo1NTo0OSwzNDggW1dvcmtlci0xMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6NTU6NDksMzUyIFtXb3JrZXItMTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTg6NTU6NDksMzU5IFtXb3JrZXItMTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE4OjU2OjUxLDE2MCBbV29ya2VyLTEyOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE4OjU2OjUxLDE2MiBbV29ya2VyLTEyOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxODo1Njo1MSwxNjQgW1dvcmtlci0xMjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxODo1Njo1MSwxNjggW1dvcmtlci0xMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTg6NTc6MTIsODM3IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yNyAxODo1NzoxNiwwMjkgW1dvcmtlci0xMzI6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI3IDE4OjU3OjE2LDAyOSBbV29ya2VyLTEzMjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNyAxODo1ODoxNSw5NjUgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI3IDE4OjU4OjE5LDAxNiBbV29ya2VyLTEzMTogTGF1bmNoaW5nIFV0aWxzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA0LTI3IDE4OjU4OjE5LDAxNiBbV29ya2VyLTEzMTogTGF1bmNoaW5nIFV0aWxzICgxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yNyAxOTowMDo0MiwwOTIgW1dvcmtlci0xMjA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE5OjAwOjQyLDA5MyBbV29ya2VyLTEyMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI3IDE5OjAwOjQyLDA5NSBbV29ya2VyLTEyMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjcgMTk6MDA6NDIsMDk2IFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjcgMTk6MDA6NDIsMTY0IFtXb3JrZXItMTIwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yNyAxOTowMDo0MiwxNjUgW1dvcmtlci0xMjA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yNyAxOTowMDo0MiwxNjcgW1dvcmtlci0xMjA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI3IDE5OjAwOjQyLDE2OCBbV29ya2VyLTEyMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDA5OjUyOjM4LDI4MyBbV29ya2VyLTY6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA0LTI4IDA5OjU4OjA3LDAyNCBbV29ya2VyLTE0OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDQtMjggMTI6NDQ6MTEsMTUxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOCAxMjo0NDoxNCw1MTMgW1dvcmtlci01MzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg1KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI4IDEyOjQ0OjE0LDUxNSBbV29ya2VyLTUzOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDEyOjQ1OjQyLDUxOSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTI6NDU6NDQsOTY5IFtXb3JrZXItNTA6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNC0yOCAxMjo0NTo0NCw5NjkgW1dvcmtlci01MDogTGF1bmNoaW5nIFdmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTI6NDY6NTYsOTA1IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMjo0Njo1Niw5MDkgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTI6NDY6NTYsOTEyIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMjo0Njo1Niw5MTQgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTI6NDY6NTcsNDUwIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMjo0Njo1Nyw0NTEgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTI6NDY6NTcsNDU0IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMjo0Njo1Nyw0NTYgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTI6NDY6NTcsOTMzIFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxMjo0Njo1Nyw5NTMgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxMjo0Njo1Nyw5NTUgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEyOjQ2OjU3LDk1NyBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEyOjQ3OjE0LDg4NyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTI6NDc6MTcsNTQ2IFtXb3JrZXItNTQ6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMjggMTI6NDc6MTcsNTQ3IFtXb3JrZXItNTQ6IExhdW5jaGluZyBXZm9ybVNlcnZpY2VzICg0KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxMjo0Nzo0MCw1MDAgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDEyOjQ3OjQzLDA0NiBbV29ya2VyLTU2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzYpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOCAxMjo0Nzo0MywwNDYgW1dvcmtlci01NjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxMjo0ODowMSw0NjQgW1dvcmtlci01NDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDg6MDEsNDczIFtXb3JrZXItNTQ6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxMjo0ODowMSw0NzUgW1dvcmtlci01NDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTI6NDg6MDEsNDg0IFtXb3JrZXItNTQ6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxMzoyNToyMiwwMDIgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEzOjI1OjIyLDAwNSBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxMzoyNToyMiwwMDcgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEzOjI1OjIyLDAxMCBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxMzoyNToyMiwwODUgW1dvcmtlci02NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDEzOjI1OjIyLDA4OSBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDEzOjI1OjIyLDA5MSBbV29ya2VyLTY3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTM6MjU6MjIsMDk0IFtXb3JrZXItNjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTM6MjU6MzEsOTQ5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOCAxMzoyNTozNCw3OTMgW1dvcmtlci02OTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDM3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTM6MjU6MzQsNzkzIFtXb3JrZXItNjk6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTY6MjI6NDAsNjQ0IFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjoyMjo0MCw2NTAgW1dvcmtlci04NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTY6MjI6NDAsNjUyIFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjoyMjo0MCw2NTQgW1dvcmtlci04NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTY6MjI6NDAsNzQ0IFtXb3JrZXItODY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjoyMjo0MCw3NTIgW1dvcmtlci04NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxNjoyMjo0MCw3NTYgW1dvcmtlci04NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE2OjIyOjQwLDc1OCBbV29ya2VyLTg2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE2OjIyOjQ4LDA4NyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTY6MjI6NTAsODk5IFtXb3JrZXItODQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzOCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI4IDE2OjIyOjUwLDg5OSBbV29ya2VyLTg0OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE2OjUwOjE1LDUyNCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTY6NTA6MTgsMTE1IFtXb3JrZXItODg6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOCAxNjo1MDoxOCwxMTYgW1dvcmtlci04ODogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICg2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnCisyMDIwLTA0LTI4IDE2OjUwOjI5LDU3OSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTY6NTA6MzMsMzM0IFtXb3JrZXItMTAyOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjggMTY6NTA6MzMsMzM1IFtXb3JrZXItMTAyOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDcpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE2OjUxOjA1LDE3MyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTY6NTE6MDgsOTUxIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgV2Zvcm1TZXJ2aWNlcyAoNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA0LTI4IDE2OjUxOjA4LDk1MSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFdmb3JtU2VydmljZXMgKDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE2OjUxOjMwLDU4MCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTY6NTE6MzMsNTI3IFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgVXRpbHMgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDQtMjggMTY6NTE6MzMsNTI3IFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgVXRpbHMgKDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE2OjUxOjUxLDQ5MyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTY6NTE6NTQsNjYyIFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoMzkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOCAxNjo1MTo1NCw2NjIgW1dvcmtlci0xMDM6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICgzOSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTY6NTI6MTQsOTUwIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjo1MjoxNCw5NTUgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTY6NTI6MTQsOTU3IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjo1MjoxNCw5NjAgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTY6NTI6MTUsMTIxIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxNjo1MjoxNSwxNDcgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxNjo1MjoxNSwxNDkgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE2OjUyOjE1LDE1OCBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjE5OjQ2LDcyNCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTg6MTk6NDksMTA5IFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjggMTg6MTk6NDksMTA5IFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDgpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjIwOjA1LDk5MSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTg6MjA6MDgsMDU3IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOCAxODoyMDowOCwwNTcgW1dvcmtlci0xMTA6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0MCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTg6MjA6MjUsMTk3IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODoyMDoyNSwyMDIgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6MjA6MjUsMjA0IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODoyMDoyNSwyMDcgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6MjA6MjUsMjcwIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODoyMDoyNSwyNzIgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxODoyMDoyNSwyNzMgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjIwOjI1LDI3NSBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjI4OjU4LDU3OCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTg6Mjk6MDAsNjc5IFtXb3JrZXItMTExOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjggMTg6Mjk6MDAsNjc5IFtXb3JrZXItMTExOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjI5OjA4LDkxMyBbV29ya2VyLTExNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjI5OjA4LDkxNSBbV29ya2VyLTExNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mjk6MDgsOTE3IFtXb3JrZXItMTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6Mjk6MDgsOTIwIFtXb3JrZXItMTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxODoyOTowOCw5NjYgW1dvcmtlci0xMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODoyOTowOCw5NjggW1dvcmtlci0xMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mjk6MDgsOTcwIFtXb3JrZXItMTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6Mjk6MDgsOTcyIFtXb3JrZXItMTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjI5OjE2LDE0NiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTg6Mjk6MTksNTIzIFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOCAxODoyOToxOSw1MjMgW1dvcmtlci0xMTg6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0MSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTg6MzA6NTksNjM5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOCAxODozMTowMiw3NzkgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTApXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjggMTg6MzE6MDIsNzc5IFtXb3JrZXItMTE0OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDEwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNC0yOCAxODozMToxMiw5MTggW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjMxOjE1LDE1NCBbV29ya2VyLTExMTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjggMTg6MzE6MTUsMTU1IFtXb3JrZXItMTExOiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjMxOjI0LDgyNCBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MzE6MjQsODI2IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjMxOjI0LDgyOCBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MzE6MjQsODMxIFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE4OjMxOjI0LDg3NiBbV29ya2VyLTExODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTg6MzE6MjQsODc3IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6MzE6MjQsODc4IFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODozMToyNCw4ODAgW1dvcmtlci0xMTg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxODozNzo1Miw4ODYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA0LTI4IDE4OjM3OjU1LDMzMSBbV29ya2VyLTEyMzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOCAxODozNzo1NSwzMzEgW1dvcmtlci0xMjM6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE4OjM4OjA3LDQ4NCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTg6Mzg6MTAsMDIxIFtXb3JrZXItMTI1OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDMpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOCAxODozODoxMCwwMjIgW1dvcmtlci0xMjU6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0MyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjggMTg6Mzg6MjEsNzcxIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODozODoyMSw3NzMgW1dvcmtlci0xMjM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mzg6MjEsNzc0IFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODozODoyMSw3NzYgW1dvcmtlci0xMjM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTg6Mzg6MjEsODExIFtXb3JrZXItMTIzOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxODozODoyMSw4MTMgW1dvcmtlci0xMjM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxODozODoyMSw4MTYgW1dvcmtlci0xMjM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE4OjM4OjIxLDgxNyBbV29ya2VyLTEyMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI2OjE0LDkyNyBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI2OjE0LDkyOSBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOToyNjoxNCw5MzEgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyNjoxNCw5MzQgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MjY6MTQsOTM0IFtXb3JrZXItMTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDE5OjI2OjE0LDkzNiBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMTk6MjY6MTUsNDI4IFtXb3JrZXItMTM1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MjY6NTcsOTMyIFtXb3JrZXItMTM4OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAxOToyNjo1OCwxMjAgW1dvcmtlci0xMzk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyNjo1OCwxNDMgW1dvcmtlci0xMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MjY6NTgsMTQ0IFtXb3JrZXItMTM5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MjY6NTgsMTQ5IFtXb3JrZXItMTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI2OjU4LDE0OSBbV29ya2VyLTEzOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAxOToyNjo1OCwxNTAgW1dvcmtlci0xMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDE5OjI2OjU4LDIwMCBbV29ya2VyLTEzOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI3OjI5LDQ2OCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTk6Mjc6MzMsMzcwIFtXb3JrZXItMTM1OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMTk6Mjc6MzMsMzcwIFtXb3JrZXItMTM1OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNC0yOCAxOToyODo0OSw3MzggW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyODo0OSw3MzkgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mjg6NDksNzQxIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mjg6NDksNzQyIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI5OjE4LDI0NCBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI5OjE4LDI0NiBbV29ya2VyLTEzNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOToyOToxOCwyNDggW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOToyOToxOCwyNTAgW1dvcmtlci0xMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mjk6MzksODQ1IFtXb3JrZXItMTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mjk6MzksODQ2IFtXb3JrZXItMTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjI5OjM5LDg0NyBbV29ya2VyLTE0MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjI5OjM5LDg0OSBbV29ya2VyLTE0MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozMTowNyw5ODkgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozMTowNyw5OTEgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MzE6MDcsOTkyIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MzE6MDcsOTk0IFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjMyOjIzLDA3OSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNC0yOCAxOTozMzowNiw3MzcgW21haW5dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yOCAxOTozMzoyNywzMzEgW1dvcmtlci0xNDI6IFVwZGF0aW5nIG1hdmVuIHByb2plY3RzIF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDQtMjggMTk6MzM6MjcsNTUyIFtXb3JrZXItMTQyOiBVcGRhdGluZyBtYXZlbiBwcm9qZWN0cyBdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yOCAxOTozMzoyOCw0NzQgW1dvcmtlci0xNDI6IFVwZGF0aW5nIG1hdmVuIHByb2plY3RzIF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjCisyMDIwLTA0LTI4IDE5OjMzOjI4LDQ3NSBbV29ya2VyLTE0MjogVXBkYXRpbmcgbWF2ZW4gcHJvamVjdHMgXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlczIvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tU2VydmljZXMyL3NyYworMjAyMC0wNC0yOCAxOTozMzoyOCw5NjIgW1dvcmtlci0xNDI6IFVwZGF0aW5nIG1hdmVuIHByb2plY3RzIF0gRVJST1Igby5lLm0yZS53dHAuV1RQUHJvamVjdENvbmZpZ3VyYXRvciAtIFVuYWJsZSB0byBjb25maWd1cmUgR2xlbW1TZXJ2aWNlczIKK29yZy5lY2xpcHNlLm0yZS53dHAuTWFya2VkRXhjZXB0aW9uOiBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMyCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24wKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjQzOSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDIuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQyLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNDkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozMzUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozMTcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozMDYpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLmludGVybmFsLnByZWZlcmVuY2VzLk1hdmVuV3RwUHJlZmVyZW5jZVBhZ2UkNC5ydW5JbldvcmtzcGFjZShNYXZlbld0cFByZWZlcmVuY2VQYWdlLmphdmE6MzkxKSBbb3JnLmVjbGlwc2UubTJlLnd0cF8xLjQuMC4yMDE4MDYwNi0yMDA1LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkgW29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpIH5bbmE6bmFdCisJLi4uIDIxIGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yOCAxOTozMzoyOSwwODAgW1dvcmtlci0xNDI6IFVwZGF0aW5nIG1hdmVuIHByb2plY3RzIF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAxOTozMzoyOSwwODcgW1dvcmtlci0xNDI6IFVwZGF0aW5nIG1hdmVuIHByb2plY3RzIF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIGNvbXBsZXRlZDogMSBzZWMKKzIwMjAtMDQtMjggMTk6MzM6NTAsMTEwIFtXb3JrZXItMTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MzM6NTAsMTE0IFtXb3JrZXItMTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjMzOjUwLDExNyBbV29ya2VyLTE0MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjMzOjUwLDEyMCBbV29ya2VyLTE0MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozMzo1MCwxMjAgW1dvcmtlci0xNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMTk6MzM6NTAsMTIxIFtXb3JrZXItMTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAxOTozMzo1MCwxMjcgW1dvcmtlci0xNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozNToyOSwxMjYgW1dvcmtlci0xNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozNToyOSwxMjggW1dvcmtlci0xNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjM1OjI5LDEzMCBbV29ya2VyLTE0MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjM1OjI5LDEzMiBbV29ya2VyLTE0MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6MzU6MjksMjI1IFtXb3JrZXItMTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6MzU6MjksMjI4IFtXb3JrZXItMTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjM1OjI5LDIzMCBbV29ya2VyLTE0MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjM1OjI5LDIzNSBbV29ya2VyLTE0MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozNzoxNiwwNzggW1dvcmtlci0xNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozNzoxNiwwNzkgW1dvcmtlci0xNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mzc6MTYsMDgxIFtXb3JrZXItMTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMTk6Mzc6MTYsMDg1IFtXb3JrZXItMTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDE5OjM3OjI5LDA2MSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjggMTk6Mzc6MzMsMzU3IFtXb3JrZXItMTQ0OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlcyAoMSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDE5OjM3OjMzLDM1NyBbV29ya2VyLTE0NDogTGF1bmNoaW5nIEdsZW1tU2VydmljZXMgKDEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI4IDE5OjM4OjMyLDc2NCBbV29ya2VyLTE0NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDE5OjM4OjMyLDc2NyBbV29ya2VyLTE0NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAxOTozODozMiw3NjggW1dvcmtlci0xNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAxOTozODozMiw3NzAgW1dvcmtlci0xNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMTk6Mzk6MDIsMjYyIFtXb3JrZXItMTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMTk6Mzk6MDIsMjYyIFtXb3JrZXItMTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAxOTo1OTo0Miw3MDIgW1dvcmtlci0xNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAxOTo1OTo0Miw3MDMgW1dvcmtlci0xNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIwOjAxOjIyLDU4NyBbV29ya2VyLTE1MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjAxOjIyLDU4OCBbV29ya2VyLTE1MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6MDM6MzIsMzExIFtXb3JrZXItMTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDQtMjggMjA6MDM6MzIsNTk4IFtXb3JrZXItMTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6MDM6MzIsNjAwIFtXb3JrZXItMTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjAzOjMyLDYwMSBbV29ya2VyLTE1MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjAzOjMyLDYwMyBbV29ya2VyLTE1MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMDowMzozMiw2MDQgW1dvcmtlci0xNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMjA6MDM6MzIsNjA0IFtXb3JrZXItMTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNC0yOCAyMDowMzozMiw2MTEgW1dvcmtlci0xNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDowMzozMyw2OTUgW1dvcmtlci0xNTU6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNC0yOCAyMDowMzo0MSw2NzggW1dvcmtlci0xNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMDowMzo0MSw2NzggW1dvcmtlci0xNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIwOjE4OjQ1LDQzNCBbV29ya2VyLTE2MjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNC0yOCAyMDoxODo0NSw5NzEgW1dvcmtlci0xNjI6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDIwOjE4OjQ2LDI5NyBbV29ya2VyLTE2MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjE4OjQ2LDMxMCBbV29ya2VyLTE2MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAyMDoxODo0NiwzMTIgW1dvcmtlci0xNjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDoxODo0NiwzMjkgW1dvcmtlci0xNjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6MTg6NDYsMzI5IFtXb3JrZXItMTYwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA0LTI4IDIwOjE4OjQ2LDMyOSBbV29ya2VyLTE2MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDQtMjggMjA6MTg6NDYsMzM2IFtXb3JrZXItMTYwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6MTg6NDYsOTY2IFtXb3JrZXItMTYyOiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI2NSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDQtMjggMjA6MTg6NTQsNjk3IFtXb3JrZXItMTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjA6MTg6NTQsNjk4IFtXb3JrZXItMTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMDozMDoxNSw5NTIgW1dvcmtlci0xNjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDozMDoxNSw5NTQgW1dvcmtlci0xNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6MzA6MTUsOTU2IFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6MzA6MTUsOTU4IFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjMwOjIzLDA5MiBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjMwOjIzLDA5MyBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6Mzc6NTUsMzM2IFtXb3JrZXItMTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjA6Mzc6NTUsMzM2IFtXb3JrZXItMTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMDozODoxMCw1MzIgW1dvcmtlci0xNjk6IExhdW5jaGluZyBUZXN0UnVubmVyXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6Mzg6MTAsNTM0IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdFJ1bm5lcl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAyMDozODoxMCw1MzUgW1dvcmtlci0xNjk6IExhdW5jaGluZyBUZXN0UnVubmVyXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6Mzg6MTAsNTM3IFtXb3JrZXItMTY5OiBMYXVuY2hpbmcgVGVzdFJ1bm5lcl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMDozODo1MCwxMjEgW1dvcmtlci0xNzI6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIwOjM4OjUwLDEyMyBbV29ya2VyLTE3MjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjM4OjUwLDEyNCBbV29ya2VyLTE3MjogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6Mzg6NTAsMTI2IFtXb3JrZXItMTcyOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6NTE6MzMsMjQ4IFtXb3JrZXItMTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjA6NTE6MzMsMjQ4IFtXb3JrZXItMTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMDo1Mjo0MCwzMzggW1dvcmtlci0xNzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDo1Mjo0MCwzNDAgW1dvcmtlci0xNzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6NTI6NDAsMzQxIFtXb3JrZXItMTc4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6NTI6NDAsMzQyIFtXb3JrZXItMTc4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjUyOjUxLDQ5NCBbV29ya2VyLTE4MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjUyOjUxLDQ5NSBbV29ya2VyLTE4MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjA6NTg6MzcsODUyIFtXb3JrZXItMTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjA6NTg6MzcsODUyIFtXb3JrZXItMTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMDo1ODo1MCwzNjAgW1dvcmtlci0xODY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMDo1ODo1MCwzNjIgW1dvcmtlci0xODY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjA6NTg6NTAsMzY1IFtXb3JrZXItMTg2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjA6NTg6NTAsMzY3IFtXb3JrZXItMTg2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIwOjU4OjU2LDgwNSBbV29ya2VyLTE4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIwOjU4OjU2LDgwNSBbV29ya2VyLTE4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjE6MDM6NDMsNTE0IFtXb3JrZXItMTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjE6MDM6NDMsNTE1IFtXb3JrZXItMTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMTowMzo1MSw5OTYgW1dvcmtlci0xOTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMTowMzo1MSw5OTkgW1dvcmtlci0xOTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjE6MDM6NTIsMDAwIFtXb3JrZXItMTkyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MDM6NTIsMDAzIFtXb3JrZXItMTkyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjAzOjU5LDI2OCBbV29ya2VyLTE5MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIxOjAzOjU5LDI2OCBbV29ya2VyLTE5MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjE6MDU6NDYsNzA0IFtXb3JrZXItMTkzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjE6MDU6NDYsNzA0IFtXb3JrZXItMTkzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMTowNTo1NywxMjYgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMTowNTo1NywxMjkgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjE6MDU6NTcsMTMwIFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MDU6NTcsMTMyIFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjA2OjAzLDcxMCBbV29ya2VyLTE5MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIxOjA2OjAzLDcxMCBbV29ya2VyLTE5MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjggMjE6MDk6NTUsNjEzIFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MDk6NTUsNjE2IFtXb3JrZXItMTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjA5OjU1LDYxNyBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIxOjA5OjU1LDYxOSBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOCAyMTowOTo1OSw3MjggW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOCAyMTowOTo1OSw3MjkgW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI4IDIxOjE1OjA2LDMyNyBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI4IDIxOjE1OjA2LDMyOSBbV29ya2VyLTE5MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOCAyMToxNTowNiwzMzAgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMToxNTowNiwzMzIgW1dvcmtlci0xOTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjE6MTU6MTAsMTIxIFtXb3JrZXItMjAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjggMjE6MTU6MTAsMTIxIFtXb3JrZXItMjAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOCAyMTozMDoyNSwwNzAgW1dvcmtlci0yMDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOCAyMTozMDoyNSwwNzIgW1dvcmtlci0yMDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjggMjE6MzA6MjUsMDc1IFtXb3JrZXItMjA1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjggMjE6MzA6MjUsMDc3IFtXb3JrZXItMjA1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI4IDIxOjMwOjI4LDY5MCBbV29ya2VyLTIwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI4IDIxOjMwOjI4LDY5MCBbV29ya2VyLTIwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMDk6Mzk6NTMsOTQyIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDQtMjkgMTc6MDU6NTQsMDI3IFtXb3JrZXItNDQ6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNC0yOSAxNzowOTo1OSw5MzkgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjA5OjU5LDk0MCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzowOTo1OSw5NDMgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjA5OjU5LDk0NCBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxNzoxMDowMiwyODQgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjEwOjAyLDI4NiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjEwOjAyLDI4OSBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MTA6MDIsMjkxIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MTA6MDMsOTUyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOSAxNzoxMDowNiw5NjUgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjEwOjA2LDk4MyBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjEwOjA2LDk4NSBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MTA6MDYsOTg4IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MTA6MDcsNjUxIFtXb3JrZXItNDY6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0NCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE3OjEwOjA3LDY1MiBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjExOjQ1LDEyOCBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6MTE6NDcsOTIwIFtXb3JrZXItNDc6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjkgMTc6MTE6NDcsOTIwIFtXb3JrZXItNDc6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTIpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjExOjU5LDM1NyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTc6MTI6MDIsMTExIFtXb3JrZXItNDg6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0NSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE3OjEyOjAyLDExMiBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDUpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE3OjE0OjU5LDU1NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MTQ6NTksNTY1IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjE0OjU5LDU2NyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MTQ6NTksNTcwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjE0OjU5LDY0OSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MTQ6NTksNjU0IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MTQ6NTksNjU1IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzoxNDo1OSw2NjAgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxNzozNDoyMCw0MzMgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjM0OjIwLDQzNSBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzozNDoyMCw0MzggW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjM0OjIwLDQ0NSBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxNzozNDoyMCw1NDkgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjM0OjIwLDU1NSBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjM0OjIwLDU1NyBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTc6MzQ6MjAsNTYwIFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTc6MzQ6MjYsOTQ4IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOSAxNzozNDozMCwxNjMgW1dvcmtlci01MTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQ2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMTc6MzQ6MzAsMTYzIFtXb3JrZXItNTE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0NildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMTc6Mzc6MTIsMjk1IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOSAxNzozNzoxNCw3MjkgW1dvcmtlci01NDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQ3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMTc6Mzc6MTQsNzMwIFtXb3JrZXItNTQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0NyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMTc6Mzg6MDcsMzYxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOSAxNzozODowOSw2NzQgW1dvcmtlci01MDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOSAxNzozODowOSw2NzQgW1dvcmtlci01MDogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMTc6Mzg6MzEsMjUxIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOSAxNzozODozMyw4MzQgW1dvcmtlci01NDogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDQ4KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMTc6Mzg6MzMsODM0IFtXb3JrZXItNTQ6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0OCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMTc6NDU6MjQsNzc1IFtXb3JrZXItNTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxNzo0NToyNCw3ODAgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxNzo0NToyNCw3OTQgW1dvcmtlci01NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE3OjQ1OjI0LDc5NiBbV29ya2VyLTU1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE3OjQ1OjMzLDE4MSBbV29ya2VyLTU3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjkgMTc6NDU6MzMsMTgxIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE4OjI5OjI4LDkxMyBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTg6Mjk6MzIsNzM4IFtXb3JrZXItNjM6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDQtMjkgMTg6Mjk6MzIsNzM5IFtXb3JrZXItNjM6IExhdW5jaGluZyBHbGVtbUNsaWVudCAoMTQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE4OjI5OjUzLDEyNSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMTg6Mjk6NTgsNjkxIFtXb3JrZXItNjg6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg0OSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDE4OjI5OjU4LDY5MSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNDkpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBwYWNrYWdlCisyMDIwLTA0LTI5IDE4OjU1OjIyLDUzNSBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOSAxODo1NToyMiw1MzYgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE4OjU1OjQxLDY5OSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMTg6NTU6NDEsNjk5IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE4OjU1OjU0LDYwOCBbV29ya2VyLTc0OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxODo1NTo1NCw2MTIgW1dvcmtlci03NDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxODo1NTo1NCw2MTUgW1dvcmtlci03NDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTg6NTU6NTQsNjE3IFtXb3JrZXItNzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTg6NTU6NTQsNzc2IFtXb3JrZXItNzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE4OjU1OjU0LDc3OCBbV29ya2VyLTc0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTg6NTU6NTQsNzc5IFtXb3JrZXItNzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE4OjU1OjU0LDc4MCBbV29ya2VyLTc0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MDI6MzAsNTAyIFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNC0yOSAxOTowMjozMywyOTQgW1dvcmtlci03NjogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOSAxOTowMjozMywyOTQgW1dvcmtlci03NjogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxNSldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMTk6MDI6NTMsOTUyIFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOSAxOTowMjo1Myw5NTIgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMTk6MDM6MDUsODMzIFtXb3JrZXItNzU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjAzOjA1LDgzNSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjAzOjA1LDgzNyBbV29ya2VyLTc1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTowMzowNSw4NDEgW1dvcmtlci03NTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOTowMzowNSw4OTcgW1dvcmtlci03NTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MDM6MDUsOTA3IFtXb3JrZXItNzU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTowMzowNSw5MDkgW1dvcmtlci03NTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MDM6MDUsOTExIFtXb3JrZXItNzU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOTowNToxMywxMzkgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA0LTI5IDE5OjA1OjEzLDE0MCBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAxOTowNToyNiwzNTggW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjA1OjI2LDM2MCBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjA1OjI2LDM2MyBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MDU6MjYsMzY0IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MDU6MzIsNTc0IFtXb3JrZXItNzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOSAxOTowNTozMiw1NzQgW1dvcmtlci03NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMTk6MTA6NTUsODQ5IFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNC0yOSAxOToxMDo1NSw4NDkgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMTk6MTE6MDksMDc0IFtXb3JrZXItODU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOToxMTowOSwwNzcgW1dvcmtlci04NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOToxMTowOSwwNzkgW1dvcmtlci04NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjExOjA5LDA4MSBbV29ya2VyLTg1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjExOjE0LDQ4NyBbV29ya2VyLTcyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDQtMjkgMTk6MTE6MTQsNDg4IFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDE5OjM2OjE1LDQ2NiBbV29ya2VyLTk1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MzY6MTUsNDY5IFtXb3JrZXItOTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjM2OjE1LDQ3MyBbV29ya2VyLTk1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MzY6MTUsNDc4IFtXb3JrZXItOTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDE5OjM2OjQ0LDEwOCBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6MzY6NDQsMTEwIFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6MzY6NDQsMTEyIFtXb3JrZXItOTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTozNjo0NCwxMTQgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOTozNjo0NCwxNjggW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjM2OjQ0LDE3MCBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTozNjo0NCwxNzIgW1dvcmtlci05MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjM2OjQ0LDE3NiBbV29ya2VyLTkzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOTo0MTo0MSw3OTQgW1dvcmtlci05NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjQxOjQxLDc5NiBbV29ya2VyLTk0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTo0MTo0MSw3OTcgW1dvcmtlci05NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDE5OjQxOjQxLDc5OSBbV29ya2VyLTk0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAxOTo0NTozOSw5NzcgW1dvcmtlci05NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW06R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDQtMjkgMTk6NDU6NDAsNjUyIFtXb3JrZXItOTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTo0NTo0MCw2NTQgW1dvcmtlci05NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6NDU6NDAsNjU1IFtXb3JrZXItOTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTo0NTo0MCw2NTcgW1dvcmtlci05NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMTk6NDY6MTAsMTk0IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMTk6NDY6MTAsMTk3IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAxOTo0NjoxMCwxOTggW1dvcmtlci0xMDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAxOTo0NjoxMCwyMDQgW1dvcmtlci0xMDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjExOjI4LDUyOSBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMjA6MTE6MzAsNzI5IFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDE2KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI5IDIwOjExOjMwLDczMCBbV29ya2VyLTExMjogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxNildIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMjA6MTE6NDQsODk1IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MTE6NDQsODk2IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxMTo0NCw4OTggW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxMTo0NCw5MDAgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjExOjQ5LDA3NiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDQtMjkgMjA6MTE6NTEsNDExIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgR2xlbW1DbGllbnQgKDE3KV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA0LTI5IDIwOjExOjUxLDQxMSBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEdsZW1tQ2xpZW50ICgxNyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDQtMjkgMjA6MTI6MDYsODU5IFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMjA6MTI6MDYsODU5IFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAyMDoxMjoyMiwwNTIgW1dvcmtlci0xMDc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjEyOjIyLDA1NCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjEyOjIyLDA1OCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MTI6MjIsMDYwIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MTI6MjIsMTY5IFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoxMjoyMiwxNzEgW1dvcmtlci0xMDc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxMjoyMiwxNzIgW1dvcmtlci0xMDc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjEyOjIyLDE3NSBbV29ya2VyLTEwNzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjEzOjA5LDI3MSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA0LTI5IDIwOjEzOjA5LDI3MSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMjkgMjA6MTU6MjAsOTY1IFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMjkgMjA6MTU6MjAsOTY1IFtXb3JrZXItMTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAyMDoxNTozMyw3OTUgW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjE1OjMzLDc5NyBbV29ya2VyLTExMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxNTozMyw3OTggW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjE1OjMzLDc5OSBbV29ya2VyLTExMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoxNTozMyw4NTIgW1dvcmtlci0xMTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjE1OjMzLDg1NCBbV29ya2VyLTExMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjE1OjMzLDg1NSBbV29ya2VyLTExMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MTU6MzMsODU3IFtXb3JrZXItMTEwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MjI6MjgsMTY2IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNC0yOSAyMDoyMjoyOCwxNjYgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0yOSAyMDoyMjozOSw1NDUgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNC0yOSAyMDoyMjozOSw1NDUgW1dvcmtlci0xMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTI5IDIwOjIyOjUxLDI5MiBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MjI6NTEsMzAxIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMjkgMjA6MjI6NTEsMzAzIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0yOSAyMDoyMjo1MSwzMDUgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoyMjo1MSwzNjUgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjIyOjUxLDM2NyBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoyMjo1MSwzNjkgW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjIyOjUxLDM3MSBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0yOSAyMDoyMjo1MSw0MDggW1dvcmtlci0xMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTI5IDIwOjIyOjUxLDQxMCBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTI5IDIwOjIyOjUxLDQxMSBbV29ya2VyLTExNTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMjkgMjA6MjI6NTEsNDEzIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDc6MzQ6NTcsODQwIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDQtMzAgMDc6NDc6MTMsMTMxIFtXb3JrZXItMTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA0LTMwIDA4OjQ4OjQzLDA2NCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NDg6NDMsMDY3IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAwODo0ODo0MywwNjkgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDA4OjQ4OjQzLDA3MSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NDg6NDQsMTMyIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo0ODo0NCwxMzQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NDg6NDQsMTM3IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo0ODo0NCwxNDAgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NDg6NDQsOTI3IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo0ODo0NCw5NDAgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAwODo0ODo0NCw5NDIgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDA4OjQ4OjQ0LDk0OCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjUxOjI2LDI5MiBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo1MToyNiwzMDAgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjUxOjI2LDMwMyBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwODo1MToyNiwzMDQgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDA4OjU1OjA2LDc1MyBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMDg6NTU6MDYsNzU2IFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAwODo1NTowNiw3NTggW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDA4OjU1OjA2LDc2MSBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDg6NTU6MTksNzUyIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDQtMzAgMDg6NTU6MTksNzUzIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDQtMzAgMDk6MDI6MTEsMTM5IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNC0zMCAwOTowMjoxMSwxMzkgW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDA5OjAyOjI1LDQxNiBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAwOTowMjoyNSw0MTkgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMDk6MDI6MjUsNDIxIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDA5OjAyOjI1LDQyMiBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNC0zMCAwOTowMjozMCw1MjEgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNC0zMCAwOTowMjozMCw1MjEgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxODoyNTo0NCw2MzUgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNC0zMCAxODoyNTo0NCw2MzcgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNC0zMCAxODoyNjowNCw2NTcgW1dvcmtlci04MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE4OjI2OjA0LDY1OSBbV29ya2VyLTgxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTg6MjY6MDQsNjYxIFtXb3JrZXItODE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODoyNjowNCw2NjIgW1dvcmtlci04MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjI2OjExLDA1OSBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA0LTMwIDE4OjI2OjExLDA1OSBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDE4OjU1OjE0LDUyMyBbV29ya2VyLTg1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMzAgMTg6NTU6MTQsNTI0IFtXb3JrZXItODU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDE4OjU1OjI2LDE4NCBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTg6NTU6MjYsMTg2IFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAxODo1NToyNiwxOTAgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE4OjU1OjI2LDE5MiBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTg6NTU6MjYsMzQwIFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NToyNiwzNDIgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAxODo1NToyNiwzNDQgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE4OjU1OjI2LDM0NiBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjU1OjMxLDcyOCBbV29ya2VyLTg4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDQtMzAgMTg6NTU6MzEsNzI4IFtXb3JrZXItODg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDE4OjU1OjUzLDg3MSBbV29ya2VyLTc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIHRlc3QgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMzAgMTg6NTU6NTMsODcxIFtXb3JrZXItNzk6IExhdW5jaGluZyBFeGVjdXRpbmcgdGVzdCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiB0ZXN0CisyMDIwLTA0LTMwIDE4OjU2OjA0LDE3OCBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMzAgMTg6NTY6MDQsMTc4IFtXb3JrZXItODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDE4OjU2OjE1LDMyOSBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NjoxNSwzMzEgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjU2OjE1LDMzMyBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NjoxNSwzMzUgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjU2OjE1LDU3NiBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NjoxNSw1ODAgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE4OjU2OjE1LDU4MiBbV29ya2VyLTg4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxODo1NjoxNSw1ODQgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA0LTMwIDE5OjEyOjEyLDgzMyBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDQtMzAgMTk6MTI6MTIsODM0IFtXb3JrZXItOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA0LTMwIDE5OjEyOjI0LDEyMSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDQtMzAgMTk6MTI6MjQsMTI0IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAxOToxMjoyNCwxMjUgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE5OjEyOjI0LDEyNyBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDQtMzAgMTk6MTI6MjQsMTc3IFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNC0zMCAxOToxMjoyNCwxNzggW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNC0zMCAxOToxMjoyNCwxODEgW1dvcmtlci0xMDA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA0LTMwIDE5OjEyOjI0LDE4MyBbV29ya2VyLTEwMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjIzOjQyLDM5NSBbV29ya2VyLTEwOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNCAxODoyNDowMiwxNDUgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6MDIsMTQ4IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6MDIsMTUyIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjAyLDE1NCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI0OjEyLDAyOCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0wNCAxODoyNDoxNywzMTUgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsMzE3IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDoxNywzMTkgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsMzIxIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDoxNywzMzkgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA0IDE4OjI0OjE3LDM0MCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA0IDE4OjI0OjE3LDM4MiBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNDoxNyw2MTEgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsNjEzIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6MTcsNjE1IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjE3LDYxOCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI0OjQxLDkzMSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTA0IDE4OjI0OjQyLDMwMiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNDo0MiwzMDQgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDo0MiwzMDYgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjQ6NDIsMzA5IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjQ6NDIsNTU2IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW06R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDUtMDQgMTg6MjQ6NDIsOTc4IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI0OjQyLDk4MCBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI0OjQyLDk4MiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNDo0Miw5ODQgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNDo1MSw3MzMgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0wNCAxODoyNDo1MSw3MzQgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDQgMTg6MjU6MTUsNjA5IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNToxNSw2MTUgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI1OjE1LDYxNyBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjU6MTUsNjIxIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToxNSw3MjIgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI1OjE1LDcyNSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToxNSw3MjggW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI1OjE1LDczMSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToxNiwyMTggW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA1LTA0IDE4OjI1OjE2LDc4NiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjU6MTYsNzg4IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjU6MTYsNzkwIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNToxNiw3OTMgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToxNiw3OTQgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA0IDE4OjI1OjE2LDc5NCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA0IDE4OjI1OjE2LDgwNiBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjU6MTcsMTIwIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDQgMTg6MjU6MTcsNTQ2IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNToxNyw1NDggW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNToxNyw1NDkgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI1OjE3LDU1MCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI1OjIzLDc4OSBbV29ya2VyLTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNCAxODoyNToyMyw3OTAgW1dvcmtlci03OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNCAxODoyNjoxMCw2MjkgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA1LTA0IDE4OjI2OjEwLDkyNSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MjY6MTAsOTI3IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNjoxMCw5MjkgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI2OjEwLDkzMSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MjY6MTEsMDU1IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDQgMTg6MjY6MTEsMTg4IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODoyNjoxMSwxOTAgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODoyNjoxMSwxOTEgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjI2OjExLDE5MyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjI2OjIyLDk2MSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNCAxODoyNjoyMiw5NjIgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNCAxODozMDowOSw1MTIgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjMwOjA5LDUxNSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjMwOjA5LDUxNyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MzA6MDksNTE5IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MzA6MTUsOTc5IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNS0wNCAxODozMDoxOCw1NjEgW1dvcmtlci0xMTogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDUwKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDQgMTg6MzA6MTgsNTYxIFtXb3JrZXItMTE6IExhdW5jaGluZyBQcm9qZWN0LVRlc3RzICg1MCldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIHBhY2thZ2UKKzIwMjAtMDUtMDQgMTg6MzU6MjcsNDkwIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozNToyNyw0OTMgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM1OjI3LDQ5NSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6MzU6MjcsNDk4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozNTozMywwNDcgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNS0wNCAxODozNTozMywwNDcgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNCAxODozNjowMSw2MTYgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM2OjAxLDYxOSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6MzY6MDEsNjIxIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozNjowMSw2MjMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM2OjA2LDgxOSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDQgMTg6MzY6MDYsODE5IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA0IDE4OjM4OjAzLDYzOCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MDMsNjQxIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MDMsNjQ0IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODowMyw2NDggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOCw1MTUgW1dvcmtlci0yMjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA0IDE4OjM4OjE4LDY1MyBbV29ya2VyLTIyOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNCAxODozODoxOCw3NzEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE4LDc3NiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOCw3ODAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE4LDc4MiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSwwNDAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDA0NSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjE5LDA0NyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMDcwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMDcxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMDcxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA0IDE4OjM4OjE5LDA3OCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMjM3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSwyNDAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjE5LDI0MiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksMjU1IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSwzNzcgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDM3OSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSwzODAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDM4MiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODoxOSw0ODYgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDQ4NyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM4OjE5LDQ4OSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNDkyIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNTAwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNCAxODozODoxOSw1MDIgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNCAxODozODoxOSw1MDggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM4OjE5LDYyNyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNjUwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzg6MTksNjUyIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNCAxODozODoxOSw2NTUgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNCAxODozODo0Myw4MTUgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA0IDE4OjM4OjQzLDgxNSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNCAxODozOTowMCwxNTEgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA0IDE4OjM5OjAwLDE1MyBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA0IDE4OjM5OjAwLDE1NSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDQgMTg6Mzk6MDAsMTU2IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDQgMTg6Mzk6MDgsMjk1IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNCAxODozOTowOCwyOTUgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMDg6Mzg6NDQsMjMwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODozODo0NCwyMzUgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODozODo0NCwyMzcgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjM4OjQ0LDI0MCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjM5OjM3LDk5NyBbV29ya2VyLTUwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6Mzk6MzcsOTk5IFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6Mzk6MzgsMDAwIFtXb3JrZXItNTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODozOTozOCwwMDIgW1dvcmtlci01MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODozOTo0Niw5MTAgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAwODozOTo0Niw5MTEgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0wNSAwODo0MDowMCw3OTEgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA4OjQwOjAwLDc5MSBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwODo0Njo1NSwzOTggW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA4OjQ2OjU1LDM5OCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwODo1MDoxNiwxNzggW1dvcmtlci01NjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA4OjUwOjE2LDM5MyBbV29ya2VyLTU2OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwODo1MDoxNiw1MDMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE2LDUwNSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNiw1MDcgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE2LDUwOSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNiw4MzAgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE2LDgzMiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUwOjE2LDgzMyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTYsODM2IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTYsODM2IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDg6NTA6MTYsODM3IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA4OjUwOjE2LDg0MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMDAxIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNywwMDMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUwOjE3LDAwNCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMDA5IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNywyNDggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDI1MCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNywyNTEgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDI1MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoxNywzNDAgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDM0MSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUwOjE3LDM0MiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMzQzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsMzQ0IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwODo1MDoxNywzNDQgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwODo1MDoxNywzNTEgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUwOjE3LDQzNCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTA6MTcsNDU4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTA6MTcsNDYwIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1MDoxNyw0NjMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwODo1MDoyNywzNzIgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA4OjUwOjI3LDM3MiBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAwODo1MjoxOCwxODAgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjUyOjE4LDE4NCBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjUyOjE4LDE4NSBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDg6NTI6MTgsMTg3IFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTQ6MDcsMDA3IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMDUgMDg6NTQ6NDIsNzE0IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjU0OjQyLDcxOCBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTQ6NDIsNzIxIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA4OjU0OjQyLDcyMyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDg6NTQ6NTMsNzgwIFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDA4OjU0OjUzLDc4MSBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDA4OjU3OjU3LDU3NCBbV29ya2VyLTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1Nzo1Nyw1NzggW1dvcmtlci0yOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjU3OjU3LDU4MSBbV29ya2VyLTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwODo1Nzo1Nyw1ODMgW1dvcmtlci0yOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA4OjU4OjAyLDIwMSBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMDg6NTg6MDIsMjAxIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDA5OjExOjU5LDM4MSBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMDk6MTE6NTksMzgxIFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDA5OjE0OjA0LDQ0MSBbV29ya2VyLTU6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwOToxNDowNCw2NjggW1dvcmtlci01OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOToxNDoyNiw2NjkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MjYsNjcyIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MjYsNjc0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjI2LDY3NiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjI3LDM2NyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyNyw0MzUgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjI3LDQzNyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyNyw0NTAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjI3LDQ1NCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDk6MTQ6MjcsNDU0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDk6MTQ6MjcsNDc4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjI5LDY3MSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDoyOSw2NzUgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MjksNjc2IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjI5LDY3OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDoyOSw4MTggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MjksODIxIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MTQ6MjksODIzIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjE0OjI5LDgzMSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjMwLDA2NyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDozMCwwNzcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjMwLDA3OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDozMCwxMjEgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjE0OjMwLDEzNCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOToxNDozMCwxMzQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDA5OjE0OjMwLDE3MSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToxNDozMCwzMDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMzM0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToxNDozMCwzNDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MTQ6MzAsMzU4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzozNCw4OTYgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjI3OjM1LDA2OSBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOToyNzo0NCwxNTUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDE1OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NCwxNjIgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDE2NSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NCw0ODEgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDQ5MyBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDQ5NSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNTE4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNTE4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNTE4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDUzMCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNjEyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NCw2NDMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDY0NCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDQsNjUxIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NCw5MDkgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDkxMiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NCw5MjIgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ0LDkyNiBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOToyNzo0NSwwMTcgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDA0MCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDA0MyBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMDQ1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMDQ2IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOToyNzo0NSwwNDYgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAwOToyNzo0NSwwNTQgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjI3OjQ1LDIwMCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMjAzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mjc6NDUsMjA1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOToyNzo0NSwyMDcgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozMTowNSwzNTUgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA1LTA1IDA5OjMxOjA1LDM2MiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6MzE6MDUsMzYzIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6MzE6MDUsMzY1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozMTowNSwzNjcgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozMTozNSwyNjEgW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNSAwOTozNzo0Myw2NDIgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM3OjQzLDY0NSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM3OjQzLDY0NyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzc6NDMsNjQ4IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTQsMzU3IFtXb3JrZXItNDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDA5OjM4OjU0LDU4NiBbV29ya2VyLTQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU0LDgzNCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTQsODQyIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU0LDg0NSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTQsODUwIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU1LDMzNCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTUsNDUzIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTUsNDU1IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1NSw0NzMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NSw0NzggW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAwOTozODo1NSw0NzkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMDk6Mzg6NTUsNTQ0IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1Niw4NDcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU2LDg0OSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTYsODUxIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1Niw4NTMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU3LDAwNiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsMDE3IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU3LDAxOSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsMDIyIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU3LDEyNyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsMTc2IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsMTc4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1NywyNDQgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1NywyNTAgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU3LDI1MCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDA5OjM4OjU3LDI1NiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6Mzg6NTcsNTc4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTozODo1Nyw1ODMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTozODo1Nyw1ODYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjM4OjU3LDU4OSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjM5OjU3LDUzMSBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTA1IDA5OjQwOjI5LDk0MCBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MjksOTQzIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjI5LDk0NyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MjksOTQ5IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMxLDA4OSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzEsMDkwIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDA6MzEsMDkzIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MDozMSwwOTUgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMiwyNTggW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMyLDI2MSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDA6MzIsMjY0IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MDozMiwyNjggW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMyLDQ4MSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzIsNDkxIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMyLDQ5NSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzIsNDk3IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMyLDc5NSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzIsNzk3IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDA6MzIsNzk5IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo0MDozMiw4MDEgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo0MDozMiw5MDUgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQwOjMyLDkwNyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjQwOjMyLDkwOSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NDA6MzIsOTEzIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDE6MjYsMDg1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQxOjI2LDA4OCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDE6MjYsMDg5IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQxOjI2LDA5MiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDE6NTksMTI0IFtXb3JrZXItMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMDUgMDk6NDI6MzEsNjk1IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQyOjMxLDY5NyBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NDI6MzEsNjk5IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjQyOjMxLDcwMSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTA6NTAsNjc4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo1MDo1MCw2ODMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjUwOjUwLDY4NSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTA6NTAsNjg3IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1MDo1MSwyMzMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUwOjUxLDIzNSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjUwOjUxLDIzOCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTA6NTEsMjQwIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTA6NTIsMTM2IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo1MDo1MiwxMzkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1MDo1MiwxNDEgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUwOjUyLDE0MyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDA5OjUxOjExLDM0MCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMDk6NTE6MTEsMzQxIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDA5OjUyOjM2LDQxMCBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTA1IDA5OjUzOjM5LDI0NSBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAwOTo1MzozOSwyNDggW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMDk6NTM6MzksMjUxIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDA5OjUzOjM5LDI1NCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1Mzo0MCwyMjMgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTM6NDAsMjI2IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1Mzo0MCwyMjggW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTM6NDAsMjMxIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1Mzo0MSw1NTEgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTM6NDEsNTU0IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1Mzo0MSw1NTcgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMDk6NTM6NDEsNTYwIFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAwOTo1NDoxNiwxMDEgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMDk6NTQ6MTYsMTAzIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTA6MDM6MDksMDQ3IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEwOjAzOjA5LDA1MiBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTA6MDM6MDksMDU0IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEwOjAzOjA5LDA1NyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTA6MDc6NDYsNzgxIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMDowNzo0Niw4NzggW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTA6MTE6MDksMTI2IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDUtMDUgMTA6MTE6MDksMTI3IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTA6MTE6MjIsODA2IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMDoxMToyMiw4MDkgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEwOjExOjIyLDgxMSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTA6MTE6MjIsODE0IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMDoxMToyMiw4NjIgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEwOjExOjIyLDg4MCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEwOjExOjIyLDg4MyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTA6MTE6MjIsOTMxIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTA6MTE6MjksOTkzIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMDoxMToyOSw5OTMgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTE6MjI6MjgsMDkxIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDUtMDUgMTE6MjI6MjgsMDkyIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTE6MjI6NDQsMTc0IFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMToyMjo0NCwxODEgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjIyOjQ0LDE4MyBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6MjI6NDQsMTg2IFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMToyMjo1MywzNDYgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA1LTA1IDExOjIyOjU3LDUxMCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgUHJvamVjdC1UZXN0cyAoNTEpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMToyMjo1Nyw1MTEgW1dvcmtlci0yNjogTGF1bmNoaW5nIFByb2plY3QtVGVzdHMgKDUxKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgcGFja2FnZQorMjAyMC0wNS0wNSAxMTo0NTozNiwyMDcgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDExOjQ1OjM2LDIwOCBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAxMTo0NTo1MSw3NzAgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjQ1OjUxLDc3NCBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjQ1OjUxLDc4MSBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NDU6NTEsNzg0IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NDU6NTYsNTYxIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMTo0NTo1Niw1NjEgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTE6NTQ6MDIsNjA4IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMTo1NDowMiw2MDggW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTE6NTQ6MjAsMzEyIFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTE6NTQ6MjAsMzEzIFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMDUgMTE6NTQ6MjgsNTg5IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMTo1NDoyOCw1ODkgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTE6NTQ6NDcsNDM4IFtXb3JrZXItMzc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAxMTo1NDo0Nyw3NDUgW1dvcmtlci0zNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsMzQzIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NDo1OCwzNDQgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsMzQ2IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NDo1OCwzNDggW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTQ6NTgsNjc3IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NDo1OCw2ODAgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo1NDo1OCw2ODIgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU0OjU4LDY4NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU0OjU4LDY4NSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDExOjU0OjU4LDY4OCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNSAxMTo1NDo1OCw3NDkgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU1OjAwLDk3MSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTU6MDAsOTc3IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo1NTowMCw5NzkgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU1OjAwLDk4MiBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMTQ4IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMSwxNTAgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMTUyIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMSwxNTQgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMjYwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMSwyNjQgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMTo1NTowMSwyNjkgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU1OjAxLDI3MyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDI3NCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMjc1IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDEsMjgwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMTo1NTowMSw0MDEgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDExOjU1OjAxLDQxNiBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDExOjU1OjAxLDQxOCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTE6NTU6MDEsNDIxIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTE6NTU6MDksNTk0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMTo1NTowOSw1OTQgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6MDU6MzgsNzU5IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjowNTozOCw3NjEgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjowNTozOCw3NjIgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjA1OjM4LDc2NCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjA1OjQ0LDQ3OSBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTI6MDU6NDQsNDc5IFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEyOjA2OjA4LDgyNyBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6MDY6MDgsODI5IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6MDY6MDgsODMyIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjowNjowOCw4MzMgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjowNjoxNSw0ODUgW1dvcmtlci00OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDEyOjA2OjE1LDQ4NiBbV29ya2VyLTQ5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAxMjowNjo0Myw1OTYgW1dvcmtlci00OTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDEyOjA2OjQzLDcwMyBbV29ya2VyLTQ5OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAxMjo0NjoyMiw5ODMgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIyLDk4NSBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMiw5ODcgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIyLDk4OSBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMywyNDkgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDI1OCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDI2MCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMjY2IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMjY2IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMjY2IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDI4MyBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMzUwIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NjoyMywzNTIgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDM1NCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDY6MjMsMzU5IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMyw1NDIgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDU1MCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMyw1NTEgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDU1NiBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NjoyMyw3MDYgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDcyNCBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ2OjIzLDcyNiBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNzI4IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDY6MjMsNzMwIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAxMjo0NjoyMyw3MzMgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNSAxMjo0NjoyMyw3NDEgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ2OjI0LDk5OSBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDEyOjQ3OjE4LDMzNCBbV29ya2VyLTQ2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcDpqc29uOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDUtMDUgMTI6NDc6MzYsOTYzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NzozNiw5NjUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ3OjM2LDk2NyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDc6MzYsOTY4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NzozNywwNjggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDA2OSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDA3MSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDc6MzcsMDczIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDc6MzcsNjA1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDUgMTI6NDc6MzcsNjM0IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjQ3OjM3LDc3NCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NDc6MzcsNzc2IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NDc6MzcsNzc3IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0NzozNyw3ODIgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0NzozOCw4MTkgW1dvcmtlci00NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcDpqc29uOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDUtMDUgMTI6NDc6MzgsODUwIFtXb3JrZXItNDc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwOmpzb246MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXA6anNvbjpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDUtMDUgMTI6NDk6NDcsNzc0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDUgMTI6NDk6NDcsODIyIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMTI6NDk6NDcsOTI3IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo0OTo0Nyw5MzAgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo0OTo0Nyw5MzIgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjQ5OjQ3LDkzNCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjQ5OjU0LDg5MSBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMTI6NDk6NTQsODkxIFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDEyOjUyOjEwLDQyNCBbV29ya2VyLTU2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL2dsZW1tL2NsaWVudC9HbGVtbUNsaWVudC8wLjEtU05BUFNIT1JUL0dsZW1tQ2xpZW50LTAuMS1TTkFQU0hPUlQucG9tCisyMDIwLTA1LTA1IDEyOjUyOjEwLDQzMyBbV29ya2VyLTU2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOjAuMS1TTkFQU0hPUlQgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDUtMDUgMTI6NTI6MTAsNDM3IFtXb3JrZXItNTY6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDEyOjUyOjEwLDYwNyBbV29ya2VyLTU2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL2dsZW1tL2NsaWVudC9HbGVtbUNsaWVudC8wLjEtU05BUFNIT1JUL0dsZW1tQ2xpZW50LTAuMS1TTkFQU0hPUlQuamFyCisyMDIwLTA1LTA1IDEyOjUyOjIwLDE2OSBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDEyOjUyOjIwLDIwMCBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6MC4xLVNOQVBTSE9SVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNS0wNSAxMjo1MjoyMCwyMDQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAxMjo1MjoyMCwyODcgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjUyOjIwLDI4OSBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjUyOjIwLDI5MSBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NTI6MjAsMjkzIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NTI6MjEsMjkyIFtXb3JrZXItNTY6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjowLjEtU05BUFNIT1JUIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjUyOjIxLDI5NSBbV29ya2VyLTU2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDEyOjUyOjIxLDYwNSBbV29ya2VyLTU2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvZ2xlbW0vY2xpZW50L0dsZW1tQ2xpZW50LzAuMS1TTkFQU0hPUlQvR2xlbW1DbGllbnQtMC4xLVNOQVBTSE9SVC1zb3VyY2VzLmphcgorMjAyMC0wNS0wNSAxMjo1MjoyMSw2NDQgW1dvcmtlci01NjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPUlQKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9SVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNS0wNSAxMjo1MzozMCwzMDggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjUzOjMwLDMxMCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjUzOjMwLDMxMiBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTI6NTM6MzAsMzE0IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NTM6MzYsMTY5IFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMjo1MzozNiwxNzAgW1dvcmtlci01NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6NTQ6MjAsMTA3IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTA1IDEyOjU0OjIwLDEwNyBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6NTQ6MzIsMTg5IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMjo1NDozMiwxOTAgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMTI6NTU6MTAsOTM5IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1NToxMCw5NDEgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NTU6MTAsOTQyIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1NToxMCw5NDUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTI6NTU6MTEsNDA0IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDUgMTI6NTU6MTEsNDMyIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDUtMDUgMTI6NTU6MTEsNDM2IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMTI6NTU6MTEsNTEzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAxMjo1NToxMSw1MTUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo1NToxMSw1MTYgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjU1OjExLDUxOCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEyOjU1OjEyLDU4MiBbV29ya2VyLTU3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA1LTA1IDEyOjU1OjEyLDU4NiBbV29ya2VyLTU3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDEyOjU1OjEyLDYzMSBbV29ya2VyLTU3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50Omphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNS0wNSAxMjo1NTozNywyNDEgW1dvcmtlci02MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDEyOjU1OjM3LDI0MSBbV29ya2VyLTYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAxMjo1OTozOSwxODMgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMDUgMTI6NTk6MzksMTg0IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAxMjo1OTo1NiwzNDcgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjU5OjU2LDM0OSBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAxMjo1OTo1NiwzNTAgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEyOjU5OjU2LDM1MiBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAxMzowMDowOCw5NDIgW1dvcmtlci02MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMzowMDowOCw5NDIgW1dvcmtlci02MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0wNSAxMzowMDoxNiwwNjQgW1dvcmtlci02MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDEzOjAwOjE2LDA2NiBbV29ya2VyLTYxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDEzOjAwOjE2LDA2NyBbV29ya2VyLTYxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMTM6MDA6MTYsMDY4IFtXb3JrZXItNjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMTM6MDA6MjMsNzIzIFtXb3JrZXItNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAxMzowMDoyMyw3MjQgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjA6NDY6MTEsMzQwIFtXb3JrZXItOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTA1IDIwOjQ2OjExLDM0MyBbV29ya2VyLTk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjA6NDg6MzYsNDg5IFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjA6NDg6MzYsNDkyIFtXb3JrZXItMTAzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMDo0ODozNiw0OTQgW1dvcmtlci0xMDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMDo0ODozNiw0OTUgW1dvcmtlci0xMDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIwOjUxOjMwLDU0NCBbV29ya2VyLTEwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHBvbS54bWwuCisyMDIwLTA1LTA1IDIwOjUxOjMwLDY3OCBbV29ya2VyLTEwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0wNSAyMDo1MTozMCw2ODYgW1dvcmtlci0xMDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjA6NTE6MzAsNjg3IFtXb3JrZXItMTAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjA6NTE6MzEsMjA4IFtXb3JrZXItMTAyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjA6NTE6MzEsMjEwIFtXb3JrZXItMTAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMDo1MTozMSwyMTEgW1dvcmtlci0xMDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMDo1MTozMSwyMTMgW1dvcmtlci0xMDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIwOjUyOjEyLDkzOCBbV29ya2VyLTEwMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMDUgMjA6NTI6MTIsOTM4IFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjA6NTM6MDcsNjcyIFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjA6NTM6MDcsNjczIFtXb3JrZXItMTA1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAyMTowOToyMCw3NDkgW1dvcmtlci0xMDU6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjA5OjIwLDc1MCBbV29ya2VyLTEwNTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMTowOTo0MCw4MTkgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAyMTowOTo0MCw4MTkgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIxOjE1OjQzLDgyOCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjE1OjQzLDgzMCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MTU6NDMsODMxIFtXb3JrZXItMTA4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjE6MTU6NDMsODMyIFtXb3JrZXItMTA4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMToxNTo0Myw5NDAgW1dvcmtlci0xMDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDUgMjE6MTU6NDMsOTc0IFtXb3JrZXItMTA4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjE1OjQzLDk3NCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjE1OjQzLDk3NCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZXM6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZXMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjE6MTU6NDQsMTA4IFtXb3JrZXItMTA4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjE6MTU6NDQsMTA5IFtXb3JrZXItMTA4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIxOjE1OjQ0LDExMCBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjE1OjQ0LDExMSBbV29ya2VyLTEwODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMToxNjoyOSwyMDggW1dvcmtlci0xMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAyMToxNjoyOSwyMDggW1dvcmtlci0xMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIxOjIyOjAyLDE5NiBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDIxOjIyOjAyLDE5NiBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjE6MjM6MjUsODY4IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjE6MjM6MjUsODY5IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNSAyMToyNjozOSwwMjIgW21haW5dIEVSUk9SIG8uZS5tLmoudS5pLkRvd25sb2FkU291cmNlc0FjdGlvbkRlbGVnYXRlIC0gQ291bGQgbm90IHNjaGVkdWxlIHNvdXJjZSBkb3dubG9hZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOiB0YXJnZXQvd2Zvcm1TZXJ2aWNlcy0wLjEtU05BUFNIT1QvV0VCLUlORi9jbGFzc2VzL2RlL2tvcmFwL3NlcnZpY2VzIFtpbiB3Zm9ybVNlcnZpY2VzXSBpcyBub3Qgb24gaXRzIHByb2plY3QncyBidWlsZCBwYXRoCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQubmV3SmF2YU1vZGVsRXhjZXB0aW9uKEphdmFFbGVtZW50LmphdmE6NTgwKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLk9wZW5hYmxlLmdlbmVyYXRlSW5mb3MoT3BlbmFibGUuamF2YToyNTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQub3BlbldoZW5DbG9zZWQoSmF2YUVsZW1lbnQuamF2YTo1OTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMjMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuSmF2YUVsZW1lbnQuZ2V0RWxlbWVudEluZm8oSmF2YUVsZW1lbnQuamF2YTozMDkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuUGFja2FnZUZyYWdtZW50Um9vdC5nZXRLaW5kKFBhY2thZ2VGcmFnbWVudFJvb3QuamF2YTo1MTEpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuUGFja2FnZUZyYWdtZW50Um9vdC5nZXRTb3VyY2VBdHRhY2htZW50UGF0aChQYWNrYWdlRnJhZ21lbnRSb290LmphdmE6NjM2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQudWkuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzQWN0aW9uRGVsZWdhdGUuc2V0QWN0aXZlRWRpdG9yKERvd25sb2FkU291cmNlc0FjdGlvbkRlbGVnYXRlLmphdmE6NTEpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuRWRpdG9yUGx1Z2luQWN0aW9uLmVkaXRvckNoYW5nZWQoRWRpdG9yUGx1Z2luQWN0aW9uLmphdmE6NjkpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuRWRpdG9yQWN0aW9uQnVpbGRlciRFZGl0b3JDb250cmlidXRpb24uZWRpdG9yQ2hhbmdlZChFZGl0b3JBY3Rpb25CdWlsZGVyLmphdmE6ODApIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuRWRpdG9yQWN0aW9uQnVpbGRlciRFeHRlcm5hbENvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihFZGl0b3JBY3Rpb25CdWlsZGVyLmphdmE6MTI5KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLkVkaXRvckFjdGlvbkJhcnMucGFydENoYW5nZWQoRWRpdG9yQWN0aW9uQmFycy5qYXZhOjM0MykgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLnVwZGF0ZUFjdGl2YXRpb25zKFdvcmtiZW5jaFBhZ2UuamF2YTozMjUpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZS5hY2Nlc3MkMTgoV29ya2JlbmNoUGFnZS5qYXZhOjMwNikgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlJEU0UGFydExpc3RlbmVyLnBhcnRBY3RpdmF0ZWQoV29ya2JlbmNoUGFnZS5qYXZhOjIxMykgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guUGFydFNlcnZpY2VJbXBsJDMucnVuKFBhcnRTZXJ2aWNlSW1wbC5qYXZhOjI1MCkgW29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaF8xLjYuMC52MjAxODA1MTYtMjAxOS5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikgW29yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uXzMuMTAuMC52MjAxODA0MTItMTEzMC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlBhcnRTZXJ2aWNlSW1wbC5maXJlUGFydEFjdGl2YXRlZChQYXJ0U2VydmljZUltcGwuamF2YToyNDcpIFtvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2hfMS42LjAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5QYXJ0U2VydmljZUltcGwuYWN0aXZhdGUoUGFydFNlcnZpY2VJbXBsLmphdmE6NzcyKSBbb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoXzEuNi4wLnYyMDE4MDUxNi0yMDE5LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guUGFydFNlcnZpY2VJbXBsLmFjdGl2YXRlKFBhcnRTZXJ2aWNlSW1wbC5qYXZhOjY4MSkgW29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaF8xLjYuMC52MjAxODA1MTYtMjAxOS5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZTQudWkuaW50ZXJuYWwud29ya2JlbmNoLlBhcnRTZXJ2aWNlSW1wbC5hY3RpdmF0ZShQYXJ0U2VydmljZUltcGwuamF2YTo2NzYpIFtvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2hfMS42LjAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2UuYnVzeU9wZW5FZGl0b3IoV29ya2JlbmNoUGFnZS5qYXZhOjMyODUpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZS5hY2Nlc3MkMjYoV29ya2JlbmNoUGFnZS5qYXZhOjMxOTIpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZSQxMC5ydW4oV29ya2JlbmNoUGFnZS5qYXZhOjMxNzQpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yLnNob3dXaGlsZShCdXN5SW5kaWNhdG9yLmphdmE6NzEpIFtvcmcuZWNsaXBzZS5zd3Qud2luMzIud2luMzIueDg2XzY0XzMuMTA3LjAudjIwMTgwNjExLTA0MjIuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihXb3JrYmVuY2hQYWdlLmphdmE6MzE2OSkgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2hQYWdlLm9wZW5FZGl0b3IoV29ya2JlbmNoUGFnZS5qYXZhOjMxMzMpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoUGFnZS5vcGVuRWRpdG9yKFdvcmtiZW5jaFBhZ2UuamF2YTozMTIzKSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkVkaXRvclV0aWxpdHkub3BlbkluRWRpdG9yKEVkaXRvclV0aWxpdHkuamF2YTozNzMpIFtvcmcuZWNsaXBzZS5qZHQudWlfMy4xNC4wLnYyMDE4MDUyOS0xMDIzLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5FZGl0b3JVdGlsaXR5Lm9wZW5JbkVkaXRvcihFZGl0b3JVdGlsaXR5LmphdmE6MTc5KSBbb3JnLmVjbGlwc2UuamR0LnVpXzMuMTQuMC52MjAxODA1MjktMTAyMy5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuamR0LnVpLmFjdGlvbnMuT3BlbkFjdGlvbi5ydW4oT3BlbkFjdGlvbi5qYXZhOjI4NCkgW29yZy5lY2xpcHNlLmpkdC51aV8zLjE0LjAudjIwMTgwNTI5LTEwMjMuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLk9wZW5BY3Rpb24ucnVuKE9wZW5BY3Rpb24uamF2YToyNDkpIFtvcmcuZWNsaXBzZS5qZHQudWlfMy4xNC4wLnYyMDE4MDUyOS0xMDIzLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZHQudWkuYWN0aW9ucy5TZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5kaXNwYXRjaFJ1bihTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5qYXZhOjI3MSkgW29yZy5lY2xpcHNlLmpkdC51aV8zLjE0LjAudjIwMTgwNTI5LTEwMjMuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC51aS5hY3Rpb25zLlNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLnJ1bihTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5qYXZhOjI0OSkgW29yZy5lY2xpcHNlLmpkdC51aV8zLjE0LjAudjIwMTgwNTI5LTEwMjMuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5uYXZpZ2F0b3IuT3BlbkFuZEV4cGFuZC5ydW4oT3BlbkFuZEV4cGFuZC5qYXZhOjUwKSBbb3JnLmVjbGlwc2UuamR0LnVpXzMuMTQuMC52MjAxODA1MjktMTAyMy5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5SZXRhcmdldEFjdGlvbi5ydW4oUmV0YXJnZXRBY3Rpb24uamF2YToyMTYpIFtvcmcuZWNsaXBzZS51aS53b3JrYmVuY2hfMy4xMTEuMC52MjAxODA1MjQtMTE1Ni5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvck1hbmFnZXIkMS5vcGVuKENvbW1vbk5hdmlnYXRvck1hbmFnZXIuamF2YToxODApIFtvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3JfMy43LjEwMC52MjAxODA1MjQtMTI0MC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuT3BlbkFuZExpbmtXaXRoRWRpdG9ySGVscGVyJEludGVybmFsTGlzdGVuZXIub3BlbihPcGVuQW5kTGlua1dpdGhFZGl0b3JIZWxwZXIuamF2YTo0NikgW29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaF8zLjExMS4wLnYyMDE4MDUyNC0xMTU2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIkMi5ydW4oU3RydWN0dXJlZFZpZXdlci5qYXZhOjg1MCkgW29yZy5lY2xpcHNlLmpmYWNlXzMuMTQuMC52MjAxODA0MjMtMDcxNC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXIucnVuKFNhZmVSdW5uZXIuamF2YTo0MikgW29yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uXzMuMTAuMC52MjAxODA0MTItMTEzMC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuSkZhY2VVdGlsLmxhbWJkYSQwKEpGYWNlVXRpbC5qYXZhOjQ0KSBbb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuU2FmZVJ1bm5hYmxlLnJ1bihTYWZlUnVubmFibGUuamF2YToxNzMpIH5bb3JnLmVjbGlwc2UuamZhY2VfMy4xNC4wLnYyMDE4MDQyMy0wNzE0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXIuZmlyZU9wZW4oU3RydWN0dXJlZFZpZXdlci5qYXZhOjg0NykgfltvcmcuZWNsaXBzZS5qZmFjZV8zLjE0LjAudjIwMTgwNDIzLTA3MTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlci5oYW5kbGVPcGVuKFN0cnVjdHVyZWRWaWV3ZXIuamF2YToxMTYyKSB+W29yZy5lY2xpcHNlLmpmYWNlXzMuMTQuMC52MjAxODA0MjMtMDcxNC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vblZpZXdlci5oYW5kbGVPcGVuKENvbW1vblZpZXdlci5qYXZhOjQ1MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLk9wZW5TdHJhdGVneS5maXJlT3BlbkV2ZW50KE9wZW5TdHJhdGVneS5qYXZhOjI3MykgfltvcmcuZWNsaXBzZS5qZmFjZV8zLjE0LjAudjIwMTgwNDIzLTA3MTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuT3BlblN0cmF0ZWd5LmFjY2VzcyQyKE9wZW5TdHJhdGVneS5qYXZhOjI2OCkgfltvcmcuZWNsaXBzZS5qZmFjZV8zLjE0LjAudjIwMTgwNDIzLTA3MTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuT3BlblN0cmF0ZWd5JDEuaGFuZGxlRXZlbnQoT3BlblN0cmF0ZWd5LmphdmE6MzA4KSB+W29yZy5lY2xpcHNlLmpmYWNlXzMuMTQuMC52MjAxODA0MjMtMDcxNC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnRUYWJsZS5zZW5kRXZlbnQoRXZlbnRUYWJsZS5qYXZhOjg2KSB+W29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjRfMy4xMDcuMC52MjAxODA2MTEtMDQyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5zZW5kRXZlbnQoRGlzcGxheS5qYXZhOjQxMTgpIH5bb3JnLmVjbGlwc2Uuc3d0LndpbjMyLndpbjMyLng4Nl82NF8zLjEwNy4wLnYyMDE4MDYxMS0wNDIyLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQuc2VuZEV2ZW50KFdpZGdldC5qYXZhOjEwNTIpIH5bb3JnLmVjbGlwc2Uuc3d0LndpbjMyLndpbjMyLng4Nl82NF8zLjEwNy4wLnYyMDE4MDYxMS0wNDIyLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5LnJ1bkRlZmVycmVkRXZlbnRzKERpc3BsYXkuamF2YTozOTMxKSB+W29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjRfMy4xMDcuMC52MjAxODA2MTEtMDQyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goRGlzcGxheS5qYXZhOjM1MzQpIH5bb3JnLmVjbGlwc2Uuc3d0LndpbjMyLndpbjMyLng4Nl82NF8zLjEwNy4wLnYyMDE4MDYxMS0wNDIyLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUkNS5ydW4oUGFydFJlbmRlcmluZ0VuZ2luZS5qYXZhOjExNzApIH5bb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnN3dF8wLjE0LjIwMC52MjAxODA1MTYtMjAxOS5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlLlJlYWxtLnJ1bldpdGhEZWZhdWx0KFJlYWxtLmphdmE6MzM2KSB+W29yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZV8xLjYuMjAwLnYyMDE4MDQyNC0xOTIyLmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lNC51aS5pbnRlcm5hbC53b3JrYmVuY2guc3d0LlBhcnRSZW5kZXJpbmdFbmdpbmUucnVuKFBhcnRSZW5kZXJpbmdFbmdpbmUuamF2YToxMDU5KSB+W29yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5zd3RfMC4xNC4yMDAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmU0LnVpLmludGVybmFsLndvcmtiZW5jaC5FNFdvcmtiZW5jaC5jcmVhdGVBbmRSdW5VSShFNFdvcmtiZW5jaC5qYXZhOjE1MykgfltvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2hfMS42LjAudjIwMTgwNTE2LTIwMTkuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaC5sYW1iZGEkMyhXb3JrYmVuY2guamF2YTo2NjcpIH5bb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5SZWFsbS5ydW5XaXRoRGVmYXVsdChSZWFsbS5qYXZhOjMzNikgfltvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLm9ic2VydmFibGVfMS42LjIwMC52MjAxODA0MjQtMTkyMi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChXb3JrYmVuY2guamF2YTo1OTcpIH5bb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKFBsYXRmb3JtVUkuamF2YToxNDgpIH5bb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuMTExLjAudjIwMTgwNTI0LTExNTYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5hcHBsaWNhdGlvbi5JREVBcHBsaWNhdGlvbi5zdGFydChJREVBcHBsaWNhdGlvbi5qYXZhOjE1MikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmludGVybmFsLmFwcC5FY2xpcHNlQXBwSGFuZGxlLnJ1bihFY2xpcHNlQXBwSGFuZGxlLmphdmE6MTk2KSB+W29yZy5lY2xpcHNlLmVxdWlub3guYXBwXzEuMy41MDAudjIwMTcxMjIxLTIyMDQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5ydW5BcHBsaWNhdGlvbihFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMzQpIH5bb3JnLmVjbGlwc2Uub3NnaV8zLjEzLjAudjIwMTgwNDA5LTE1MDAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5pbnRlcm5hbC5hZGFwdG9yLkVjbGlwc2VBcHBMYXVuY2hlci5zdGFydChFY2xpcHNlQXBwTGF1bmNoZXIuamF2YToxMDQpIH5bb3JnLmVjbGlwc2Uub3NnaV8zLjEzLjAudjIwMTgwNDA5LTE1MDAuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdG9yLkVjbGlwc2VTdGFydGVyLnJ1bihFY2xpcHNlU3RhcnRlci5qYXZhOjM4OCkgfltvcmcuZWNsaXBzZS5vc2dpXzMuMTMuMC52MjAxODA0MDktMTUwMC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0b3IuRWNsaXBzZVN0YXJ0ZXIucnVuKEVjbGlwc2VTdGFydGVyLmphdmE6MjQzKSB+W29yZy5lY2xpcHNlLm9zZ2lfMy4xMy4wLnYyMDE4MDQwOS0xNTAwLmphcjpuYV0KKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKSB+W25hOjEuOC4wXzIzMV0KKwlhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjYyKSB+W25hOjEuOC4wXzIzMV0KKwlhdCBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9rZShEZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6NDMpIH5bbmE6MS44LjBfMjMxXQorCWF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6NDk4KSB+W25hOjEuOC4wXzIzMV0KKwlhdCBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLk1haW4uaW52b2tlRnJhbWV3b3JrKE1haW4uamF2YTo2NTYpIH5bb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8xLjUuMC52MjAxODA1MTItMTEzMC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLmJhc2ljUnVuKE1haW4uamF2YTo1OTIpIH5bb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8xLjUuMC52MjAxODA1MTItMTEzMC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlci5NYWluLnJ1bihNYWluLmphdmE6MTQ5OCkgfltvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXzEuNS4wLnYyMDE4MDUxMi0xMTMwLmphcjpuYV0KKzIwMjAtMDUtMDUgMjE6MzI6MjgsMzQ2IFtXb3JrZXItMTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjE6MzI6MjgsMzQ4IFtXb3JrZXItMTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIxOjMyOjI4LDM0OSBbV29ya2VyLTEyMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjMyOjI4LDM1MSBbV29ya2VyLTEyMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMTozMjozNCw1NjUgW1dvcmtlci0xMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAyMTozMjozNCw1NjUgW1dvcmtlci0xMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIxOjM2OjMyLDg5NCBbV29ya2VyLTEyNDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjE6MzY6MzIsODk1IFtXb3JrZXItMTI0OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjM2OjMyLDg5NiBbV29ya2VyLTEyNDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VzOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIxOjM2OjMyLDkzMSBbV29ya2VyLTEyNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjM2OjMyLDkzMyBbV29ya2VyLTEyNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMTozNjozMiw5MzUgW1dvcmtlci0xMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozNjozMiw5MzggW1dvcmtlci0xMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MzY6NDgsNDUwIFtXb3JrZXItMTI2OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDIxOjM2OjQ4LDU3MCBbV29ya2VyLTEyMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjM2OjQ4LDU4MCBbV29ya2VyLTEyMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMTozNjo0OCw1ODEgW1dvcmtlci0xMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMTozNjo0OCw1ODYgW1dvcmtlci0xMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjE6MzY6NDgsNTg3IFtXb3JrZXItMTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDUgMjE6MzY6NDgsNTg3IFtXb3JrZXItMTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDIxOjM2OjQ4LDYwOCBbV29ya2VyLTEyMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjM2OjU0LDg5MSBbV29ya2VyLTEyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA1LTA1IDIxOjM2OjU0LDg5MiBbV29ya2VyLTEyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjE6Mzc6MTgsODc4IFtXb3JrZXItMTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjE6Mzc6MTgsODgwIFtXb3JrZXItMTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIxOjM3OjE4LDg4MSBbV29ya2VyLTEyNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIxOjM3OjE4LDg4MyBbV29ya2VyLTEyNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNSAyMTozNzoyNCw2NTMgW1dvcmtlci0xMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNSAyMTozNzoyNCw2NTMgW1dvcmtlci0xMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA1IDIyOjU1OjQxLDU3NSBbV29ya2VyLTEzNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0wNSAyMjo1NTo0MSw2MjAgW1dvcmtlci0xMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTU6NDEsNjIxIFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTU6NDEsNjIyIFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlczogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlcy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMjo1NTo0MSw3MzcgW1dvcmtlci0xMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMjo1NTo0MSw3MzkgW1dvcmtlci0xMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjI6NTU6NDEsNzQxIFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDUgMjI6NTU6NDEsNzQzIFtXb3JrZXItMTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA1IDIyOjU1OjQ5LDEzMSBbV29ya2VyLTEzMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA1IDIyOjU1OjQ5LDEzMSBbV29ya2VyLTEzMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDUgMjI6NTY6MzAsNTM1IFtXb3JrZXItMTM5OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMjo1NjozMCw1MzUgW1dvcmtlci0xMzk6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTY6MzAsNTM2IFtXb3JrZXItMTM5OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZXM6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZXMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDUgMjI6NTY6MzksMTYwIFtXb3JrZXItMTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTA1IDIyOjU2OjM5LDE5NiBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMjo1NjozOSwxOTYgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNSAyMjo1NjozOSwxOTcgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VzOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA1IDIyOjU2OjM5LDI3OSBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA1IDIyOjU2OjM5LDI4MCBbV29ya2VyLTEzNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNSAyMjo1NjozOSwyODEgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNSAyMjo1NjozOSwyODMgW1dvcmtlci0xMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDUgMjI6NTY6NDQsNTkwIFtXb3JrZXItMTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDUgMjI6NTY6NDQsNTkxIFtXb3JrZXItMTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAwOToyOTowMCw2OTUgW1dvcmtlci0xNTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNjk2IFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNjk2IFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlczogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlcy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNiAwOToyOTowMCw3NzkgW1dvcmtlci0xNTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAwOToyOTowMCw3ODIgW1dvcmtlci0xNTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNzg0IFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMDk6Mjk6MDAsNzg2IFtXb3JrZXItMTU5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDA5OjI5OjA3LDI2NCBbV29ya2VyLTE2MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDA5OjI5OjA3LDI2NCBbV29ya2VyLTE2MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMDk6MzU6MzEsNjM0IFtXb3JrZXItMTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMDk6MzU6MzEsNjM1IFtXb3JrZXItMTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAwOTozODoxNCw4MjcgW1dvcmtlci0xNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAwOTozODoxNCw4MjcgW1dvcmtlci0xNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDA5OjM4OjUyLDc2OCBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDA5OjM4OjUyLDc2OCBbV29ya2VyLTE2NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMDk6Mzk6MDEsNDQxIFtXb3JrZXItMTY4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMDk6Mzk6MDEsNDQzIFtXb3JrZXItMTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDA5OjM5OjAxLDQ0NSBbV29ya2VyLTE2ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDA5OjM5OjAxLDQ0NiBbV29ya2VyLTE2ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAwOTozOTowOCw1ODcgW1dvcmtlci0xNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAwOTozOTowOCw1ODcgW1dvcmtlci0xNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDA5OjQxOjIzLDk5OSBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0wNiAwOTo0MToyNCwxMDkgW1dvcmtlci0xNjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMDk6NDE6MjQsMTA5IFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMDk6NDE6MjQsNTI5IFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMDk6NDE6MjQsNTMwIFtXb3JrZXItMTY2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDA5OjQxOjI0LDUzMiBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDA5OjQxOjI0LDUzMyBbV29ya2VyLTE2NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAwOTo0MjowMCw3NjcgW1dvcmtlci0xNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAwOTo0MjowMCw3NjcgW1dvcmtlci0xNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDA5OjQ4OjMwLDM5OSBbV29ya2VyLTE3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDA5OjQ4OjMwLDM5OSBbV29ya2VyLTE3NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTQ6NTg6MTQsNjk3IFtXb3JrZXItMjA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTQ6NTg6MTQsNjk4IFtXb3JrZXItMjA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNDo1ODo0NCw1MjUgW1dvcmtlci0yMDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTQ6NTg6NDQsNTI1IFtXb3JrZXItMjAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTQ6NTg6NDQsNTM3IFtXb3JrZXItMjAyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTQ6NTg6NDQsNTQwIFtXb3JrZXItMjAyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE0OjU4OjQ0LDU0MiBbV29ya2VyLTIwMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE0OjU4OjQ0LDU0NCBbV29ya2VyLTIwMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNDo1ODo1Miw1NDkgW1dvcmtlci0yMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNDo1ODo1Miw1NTAgW1dvcmtlci0yMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE1OjAwOjE3LDMwMCBbV29ya2VyLTIwMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjAwOjE3LDMwMSBbV29ya2VyLTIwMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTowMDoxNywzMDIgW1dvcmtlci0yMDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTowMDoxNywzMDQgW1dvcmtlci0yMDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MDA6MjgsNDIyIFtXb3JrZXItMjAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMTU6MDA6MjgsNDIyIFtXb3JrZXItMjAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNTozMjozNiwwNDEgW1dvcmtlci03OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNS0wNiAxNTozNToxMiw3NzggW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0wNiAxNTozNTozNiw3ODEgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNTozNTozNiw3ODIgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0wNiAxNTozNTo0OCwzOTAgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDE1OjM1OjQ4LDM5MCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNTozNjoxNiw4NzkgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjE2LDg4MiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoxNiw4ODUgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjE2LDg4NyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoxOCw5NTYgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjE4LDk1OCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjE4LDk2MSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6MzY6MTgsOTY0IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjIsMzQyIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTozNjoyMiwzNDQgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjIyLDM0NiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6MzY6MjIsMzQ5IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoyMiw2MDEgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIyLDYwMyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoyMiw2MDUgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIyLDYwNyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTozNjoyMiw4MzUgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIyLDgzOCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjIyLDg0MiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6MzY6MjIsODY1IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjMsMDY4IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTU6MzY6MjMsMDY5IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNiAxNTozNjoyMywwODggW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjM2OjIzLDEwMSBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjM2OjIzLDEwMyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6MzY6MjMsMTE3IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6MzY6MzAsMTE1IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDE1OjM2OjMwLDExNSBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE1OjM5OjI3LDIwNyBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTA2IDE1OjQ2OjQ0LDgwMiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTA2IDE1OjQ3OjIyLDY0MiBbV29ya2VyLTExOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNiAxNTo0NzoyMiw2NDMgW1dvcmtlci0xMTogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNiAxNTo0NzoyMywxNjggW1dvcmtlci0xMTogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNiAxNTo0NzoyMyw3ODIgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjIzLDc5MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyMyw3OTQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjIzLDgyMSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNCw4ODYgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI0LDg4OSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI0LDg5MyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6NDc6MjQsODk1IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsMzMxIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNiwzMzMgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDMzNSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6NDc6MjYsMzM4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw1NTYgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDU2MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw1NjIgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDU2NCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw3MTAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDczNCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDc0MSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNzYxIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsNzYzIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw3NjQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw3OTQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDk0NyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA2IDE1OjQ3OjI2LDk0OCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTU6NDc6MjYsOTU0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNTo0NzoyNiw5ODAgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNTo0NzoyNiw5ODIgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE1OjQ3OjI3LDAzNCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE1OjQ3OjQyLDkzNSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNTo0Nzo0Miw5MzYgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNjowMToxMiwzMTYgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAxOjEyLDMyMyBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjAxOjEyLDMyNCBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDE6MTIsMzI3IFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDE6MTgsMTg5IFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNjowMToxOCwxODkgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTY6MDI6MjgsMzIyIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNjowMjoyOCwzMjUgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowMjoyOCwzMjcgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAyOjI4LDMyOSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjAyOjM0LDM1NSBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNjowMjozNCwzNTUgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNiAxNjowMjo1OSwxNDAgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDI6NTksMTU0IFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowMjo1OSwxNTYgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDI6NTksMTU4IFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowMzo0MCw2OTIgW1dvcmtlci0xNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjAzOjQwLDY5NSBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjAzOjQwLDczOSBbV29ya2VyLTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDM6NDAsNzQ4IFtXb3JrZXItMTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDM6NDcsNTA0IFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTA2IDE2OjAzOjQ3LDUwNCBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDE2OjA4OjE4LDMwNiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDg6MTgsMzEwIFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDg6MTgsMzEyIFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxNjowODoxOCwzMTQgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNiAxNjowODoyNyw3NDUgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE2OjA4OjI3LDc0OCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA2IDE2OjA4OjI3LDc1MCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDYgMTY6MDg6MjcsNzUyIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTY6MDg6NDAsMzgxIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxNjowODo0MCwzODEgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTk6NDM6MzMsODM0IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNiAxOTo0MzozMyw4NTcgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDYgMTk6NTg6MzAsODA0IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxOTo1ODozMCw4MDggW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTk6NTg6MzAsODEwIFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxOTo1ODozMCw4MTMgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDYgMTk6NTg6MzEsOTc0IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMDYgMTk6NTg6MzIsMDM3IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTk6NTg6MzIsMDM3IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNiAxOTo1ODozMiwwMzggW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDYgMTk6NTg6MzIsNzE3IFtXb3JrZXItNDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNiAxOTo1ODozMiw3MTkgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNiAxOTo1ODozMiw3MjAgW1dvcmtlci00NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA2IDE5OjU4OjMyLDcyMiBbV29ya2VyLTQ2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA2IDIwOjAwOjIyLDIzOSBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNS0wNiAyMDowMDoyMiwyNDAgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA2IDIwOjAxOjMwLDY1MyBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDYgMjA6MDE6MzAsNjU0IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA3IDA5OjI0OjQzLDM0NiBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMDk6MjQ6NDMsMzQ4IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA3IDA5OjI2OjA1LDg0NSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMDk6MjY6MDUsODQ1IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA3IDA5OjI2OjM2LDA2NSBbV29ya2VyLTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMDk6MjY6MzYsMDY2IFtXb3JrZXItNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA3IDA5OjI3OjA0LDMxNCBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMDk6Mjc6MDQsMzE0IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTA3IDA5OjQzOjIyLDM4OSBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMDk6NDM6MjIsMzkxIFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDA5OjQzOjIyLDM5MyBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMDk6NDM6MjIsMzk0IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTA3IDA5OjQzOjIyLDkyMSBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMDk6NDM6MjIsOTIzIFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMDk6NDM6MjIsOTI1IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAwOTo0MzoyMiw5MjcgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNyAwOTo0MzoyMywzODUgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAwOTo0MzoyMywzODUgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDA5OjQzOjIzLDM4NSBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAwOTo0MzoyMywzOTAgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDA5OjQzOjIzLDM5MiBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDA5OjQzOjIzLDM5NCBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMDk6NDM6MjMsMzk2IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMDk6NDM6MzIsMzkwIFtXb3JrZXItODU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNyAwOTo0MzozMiwzOTAgW1dvcmtlci04NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMDcgMDk6NDU6MDQsNjAwIFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDU6MDQsNjAxIFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAwOTo0NTowNCw2MDIgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDU6MDQsNjIxIFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMDk6NDU6MDQsNjIzIFtXb3JrZXItODU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAwOTo0NTowNCw2MjQgW1dvcmtlci04NTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTE2IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEwOjAwOjI3LDExOCBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTE5IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEwOjAwOjI3LDEyMSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTU0IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTU1IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMDowMDoyNywxNTYgW1dvcmtlci04NzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTY4IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6MjcsMTY5IFtXb3JrZXItODc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMDowMDoyNywxNjkgW1dvcmtlci04NzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6NTQsMTM1IFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6NTQsMTM3IFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMDowMDo1NCwxMzkgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6NTQsMTYwIFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTA6MDA6NTQsMTYyIFtXb3JrZXItODg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0wNyAxMDowMDo1NCwxNjQgW1dvcmtlci04ODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTE6MjQ6NTEsNjQyIFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMDcgMTE6MjQ6NTEsNjQzIFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0wNyAxMToyNTowNSwzODkgW1dvcmtlci0xMDE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDExOjI1OjA1LDM5NiBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDM5NyBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTE6MjU6MDUsMzk4IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTE6MjU6MDUsNDI3IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDQyOCBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDQyOSBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTE6MjU6MDUsNDQyIFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDQ0MyBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDExOjI1OjA1LDQ0NCBbV29ya2VyLTEwMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTI6MDc6MzUsMzQ0IFtXb3JrZXItMTEwOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDcgMTI6MDc6MzUsNzYxIFtXb3JrZXItMTEwOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNyAxMjowNzozNiwyNDQgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzozNiwyNDggW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjM2LDI0OSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjM2LDI1MiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6MzYsODYwIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6MzYsODY5IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjM2LDg3MSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjM2LDg3NiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzozNiw4NzcgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMDcgMTI6MDc6MzYsODc3IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0wNyAxMjowNzozOSwzMjkgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0MiwzOTIgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0MiwzOTQgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo0MiwzOTYgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0MiwzOTggW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo0Miw1MTUgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0wNyAxMjowNzo0Miw1MTcgW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDUxOCBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjQyLDUyMSBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNjI5IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNjMxIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDYzMyBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjQyLDYzNyBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo0Miw2MzggW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0wNyAxMjowNzo0Miw2MzggW1dvcmtlci0xMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsNjQzIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsOTI1IFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkyNiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkyNiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMDcgMTI6MDc6NDIsOTMwIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMDcgMTI6MDc6NDIsOTMyIFtXb3JrZXItMTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkzNCBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTA3IDEyOjA3OjQyLDkzNiBbV29ya2VyLTExMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0wNyAxMjowNzo1MCw1OTggW1dvcmtlci0xMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0wNyAxMjowNzo1MCw1OTggW1dvcmtlci0xMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDA5OjE5OjAzLDgxMyBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTEyIDA5OjMzOjM2LDQ4OSBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTEyIDA5OjMzOjU1LDgzMiBbV29ya2VyLTk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA1LTEyIDA5OjM0OjAwLDI0NCBbV29ya2VyLTk6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAwOTozNDowMCw0ODEgW1dvcmtlci05OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MDAsNDgyIFtXb3JrZXItOTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MDAsNDgyIFtXb3JrZXItOTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAwOTozNDowMCw2NzQgW1dvcmtlci05OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0xMiAwOTozNDowMSw0NjAgW1dvcmtlci00OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDUtMTIgMDk6MzQ6MDEsNDYwIFtXb3JrZXItOTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTAsMzMyIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6MTIsNzc1IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjEyLDc3NyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjEyLDc4MCBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxMiw3ODIgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxMyw1NDcgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTMsNTQ5IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxMyw1NTEgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTMsNTU0IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxMyw1NTUgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDA5OjM0OjEzLDU1NiBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDA5OjM0OjEzLDYxNSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNCwyMzYgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6MTQsODc2IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjE0LDg5OSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAwOTozNDoxNCw5MDIgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTQsOTA4IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE1LDM4MSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxwb20ueG1sLgorMjAyMC0wNS0xMiAwOTozNDoxNSw4NDAgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMDk6MzQ6MTUsODQzIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTUsODQ1IFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjE1LDg0NyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDA1OSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNiwwNjMgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDA2NSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNiwwNzAgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDA3MSBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAwOTozNDoxNiwwNzEgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDA3NyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNiw0NzIgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTEyIDA5OjM0OjE2LDU0MyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMDk6MzQ6MTYsNTQzIFtXb3JrZXItNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDU0MyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDkyMyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNiw5MjUgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjE2LDkyNyBbV29ya2VyLTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDoxNiw5MjkgW1dvcmtlci00OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjIzLDgyOCBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAwOTozNDoyMyw4MjkgW1dvcmtlci0xOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAwOTozNDo0MCw1MDMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6NDAsNjIxIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDo0MCw2MjMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6NDAsNjI1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDo0MCw2MjcgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6NDAsOTc0IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNS0xMiAwOTozNDo0MSwxMjIgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM0OjQxLDEyMyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6NDEsMTI1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDo0MSwxMjcgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQxLDM2NSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDUtMTIgMDk6MzQ6NDEsNDM4IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDo0MSw0NDAgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6NDEsNDQyIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAwOTozNDo0MSw0NDQgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzQ6NDYsMDcyIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDA5OjM0OjQ2LDA3MyBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDA5OjM0OjU5LDY0MyBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAwOTozNDo1OSw2NDQgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAwOTozNjoyMSw3MjkgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMDk6MzY6MjEsNzI5IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMDk6MzY6MzgsNDM3IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM2OjM4LDQzOSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzY6MzgsNDQwIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDA5OjM2OjM4LDQ0MSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMDk6MzY6NDQsMzE1IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDA5OjM2OjQ0LDMxNSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDA5OjM3OjA5LDI2OSBbV29ya2VyLTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAwOTozNzowOSwyNzAgW1dvcmtlci02OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMDo1NDo1NSw1MzQgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDEwOjU0OjU1LDUzNSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMDo1NzoxMiw0MzYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEwOjU3OjEyLDQ0MSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEwOjU3OjEyLDQ0MiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTA6NTc6MTIsNDQ0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTA6NTc6MTIsNjU5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDUtMTIgMTA6NTc6MTIsODA1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTA6NTc6MTIsODA1IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxMDo1NzoxMiw4MDYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTA6NTc6MTIsOTM3IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMDo1NzoxMiw5NDEgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMDo1NzoxMiw5NDMgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEwOjU3OjEyLDk0NSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEwOjU3OjE3LDM2OSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTA6NTc6MTcsMzY5IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDExOjA0OjUyLDk0NSBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDExOjA0OjUyLDk0NSBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDExOjA1OjAyLDgyNiBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTE6MDU6MDIsODI3IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDExOjEyOjAzLDI0OSBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTE6MTI6MDMsMjQ5IFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDExOjEyOjE1LDc1OSBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTE6MTI6MTUsNzYwIFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDExOjM0OjMwLDc2MCBbV29ya2VyLTc6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTEyIDExOjM0OjM5LDQ0NiBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxMTozNDozOSw0NDggW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMTozNjo0OSw2OTEgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTE6MzY6NDksNjkxIFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTE6NDI6MTQsNjg0IFtXb3JrZXItMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMTIgMTE6NDg6NDUsMzYyIFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDUtMTIgMTE6NDg6NDUsMzY0IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTE6NTA6MDksNDU4IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjA5LDQ2MCBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDExOjUwOjA5LDQ2MyBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMTo1MDowOSw0NjUgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMCw0NDIgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTAsNDUyIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMCw0NTQgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTAsNDgxIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMSw3OTggW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTEsODAxIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDExOjUwOjExLDgwMyBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMTo1MDoxMSw4MDYgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTE6NTA6MTEsOTk4IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDExOjUwOjEyLDAwMCBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDExOjUwOjEyLDAwMiBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMTo1MDoxMiwwMDQgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMiwyNjggW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTIsMjc1IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMiwyNzcgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTIsMjgzIFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMiw0NjkgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDExOjUwOjEyLDQ3MCBbV29ya2VyLTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxMTo1MDoxMiw0NzAgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxMTo1MDoxMiw0ODYgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTIsNDg5IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoxMiw0OTEgW1dvcmtlci0xOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTE6NTA6MTIsNDk0IFtXb3JrZXItMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMTo1MDoyMSwzMDIgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDExOjUwOjIxLDMwMyBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxMjo1NDozMiw2ODYgW01vZGFsQ29udGV4dF0gV0FSTiAgby5lLm0uai5pLkphdmFQcm9qZWN0Q29udmVyc2lvblBhcnRpY2lwYW50IC0gd2Zvcm1TZXJ2aWNlSmFyIGhhcyBtdWx0aXBsZSBzb3VyY2UgZW50cmllcywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIHlldAorMjAyMC0wNS0xMiAxMjo1NDo0MCw1NzcgW1dvcmtlci0yMjogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTEyIDEyOjU0OjQxLDA3NyBbV29ya2VyLTIyOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZUphci9zcmMKKzIwMjAtMDUtMTIgMTI6NTQ6NDEsMDc4IFtXb3JrZXItMjI6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZUphci9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvd2Zvcm1TZXJ2aWNlSmFyL3NyYworMjAyMC0wNS0xMiAxMjo1NDo0MSwzNDEgW1dvcmtlci0yMjogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgc3RhcnRlZAorMjAyMC0wNS0xMiAxMjo1NDo0MSw4ODEgW1dvcmtlci0yMjogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTEyIDEyOjU0OjQyLDE2OSBbV29ya2VyLTIyOiBFbmFibGluZyBNYXZlbiBEZXBlbmRlbmN5IE1hbmFnZW1lbnRdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZUphci9zcmMKKzIwMjAtMDUtMTIgMTI6NTQ6NDIsMTcwIFtXb3JrZXItMjI6IEVuYWJsaW5nIE1hdmVuIERlcGVuZGVuY3kgTWFuYWdlbWVudF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZUphci9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvd2Zvcm1TZXJ2aWNlSmFyL3NyYworMjAyMC0wNS0xMiAxMjo1NDo0MiwzNzIgW1dvcmtlci0yMjogRW5hYmxpbmcgTWF2ZW4gRGVwZW5kZW5jeSBNYW5hZ2VtZW50XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAxIHNlYworMjAyMC0wNS0xMiAxMjo1NDo1MiwwNDYgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEyOjU0OjUyLDA0OCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTI6NTQ6NTIsMDQ5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMjo1NDo1MiwwNTEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEyOjU2OjUxLDIxNiBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTEyIDEyOjU2OjUxLDU5MCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTI6NTY6NTEsNTk1IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMjo1Njo1MSw1OTkgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEyOjU2OjUxLDYwMSBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTI6NTc6MDMsNzg5IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTI6NTc6MDMsNzkwIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTI6NTk6MjgsMjAxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMjo1OToyOCwyMDMgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEyOjU5OjI4LDIwNSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTI6NTk6MjgsMjA3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxMjo1OTo0MCw4MjQgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTI6NTk6NDAsODI0IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxMjo1OTo1MCw0NjQgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEyOjU5OjUwLDQ2NiBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTI6NTk6NTAsNDY3IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMjo1OTo1MCw0NjkgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEyOjU5OjU1LDcyOSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDEyOjU5OjU1LDcyOSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDEzOjAwOjA5LDEyMyBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTM6MDA6MDksMTI1IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMzowMDowOSwxMjcgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEzOjAwOjA5LDEyOCBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTM6MDA6MDksMTQ2IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxMzowMDowOSwxNDggW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxMzowMDowOSwxNDkgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDEzOjAwOjA5LDE1NSBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDEzOjAwOjE3LDYxNCBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDEzOjAwOjE3LDYxNCBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDEzOjAwOjI1LDUyMiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTM6MDA6MjUsNTIyIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE1OjIxOjUxLDIxMSBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6MjE6NTEsMjEzIFtXb3JrZXItMjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNToyMTo1MSwyMTUgW1dvcmtlci0yOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjIxOjUxLDIxNyBbV29ya2VyLTI5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6MjQ6MTAsODM5IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJccG9tLnhtbC4KKzIwMjAtMDUtMTIgMTU6MjQ6MTEsMzU3IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNToyNDoxMSwzNTkgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI0OjExLDM2MSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6MjQ6MTEsMzYzIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNToyNzoyMyw3NjMgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTU6Mjc6MjMsNzYzIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxNToyNzozNywwNTEgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xMiAxNToyNzozNywwNTEgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNToyODowMCw1OTMgW1dvcmtlci0zMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjI4OjAwLDU5NSBbV29ya2VyLTMxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6Mjg6MDAsNTk2IFtXb3JrZXItMzE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNToyODowMCw1OTggW1dvcmtlci0zMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI4OjAwLDYzMCBbV29ya2VyLTMxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6Mjg6MDAsNjMxIFtXb3JrZXItMzE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6Mjg6MDAsNjM0IFtXb3JrZXItMzE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNToyODowMCw2MzUgW1dvcmtlci0zMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNToyODowOSw0NTMgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE1OjI4OjA5LDQ1MyBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNToyODo1NiwzNzMgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE1OjI4OjU2LDM3NSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjI4OjU2LDM3NiBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6Mjg6NTYsMzc4IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6Mjk6MDMsNjEwIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNToyOTowMyw2MTAgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTU6MzI6MjMsNzg0IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTU6MzI6MjMsNzg0IFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTU6MzI6MzIsMjMzIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNTozMjozMiwyMzMgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTU6NDM6MTQsMTIzIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA1LTEyIDE1OjQzOjE0LDEyNCBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTU6NDg6MjcsNjYxIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTU6NDg6MjcsNjYyIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTU6NTg6MzksMTEzIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTEyIDE1OjU4OjM5LDExMyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTU6NTg6NDcsNjkwIFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNTo1ODo0Nyw2OTMgW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6NTg6NDcsNjk0IFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNTo1ODo0Nyw2OTYgW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTU6NTg6NDcsODEzIFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNTo1ODo0Nyw4MTYgW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE1OjU4OjQ3LDgxOCBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTU6NTg6NDcsODE5IFtXb3JrZXItNDA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNTo1ODo1NywyMjYgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xMiAxNTo1ODo1NywyMjYgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjowMDoxMSwxMjkgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE2OjAwOjExLDEyOSBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjowMTowMyw4MzYgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNjowMTowMyw4MzYgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxNjowMToxMSw4OTggW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjAxOjExLDkwMCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjAxOjExLDkwMiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDE6MTEsOTA0IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDE6MTIsMTE3IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowMToxMiwxMTkgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjAxOjEyLDEyMCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDE6MTIsMTIzIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowMToxMiwyNjAgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjAxOjEyLDI2MiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjAxOjEyLDI2NCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDE6MTIsMjY2IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDQ6NDIsMTkwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowNDo0MiwxOTIgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA0OjQyLDE5NCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDQ6NDIsMTk1IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowNTo0NiwwMTkgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA1OjQ2LDAyMiBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDU6NDYsMDI0IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowNTo0NiwwMjcgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA2OjQwLDk4MCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDY6NDAsOTgyIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowNjo0MCw5ODMgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA2OjQwLDk4NSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDY6NDgsMjI3IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTIgMTY6MDY6NDgsMjI3IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MDg6MTQsODk2IFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjowODoxNCw4OTggW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA4OjE0LDg5OSBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDg6MTQsOTAxIFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjowODoxNCw5NzQgW1dvcmtlci00MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjA4OjE0LDk3NiBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjA4OjE0LDk3NyBbV29ya2VyLTQyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MDg6MTQsOTgwIFtXb3JrZXItNDI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MDg6MjAsMjg0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNjowODoyMCwyODQgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MDg6MzYsNjY2IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNjowODozNiw2NjYgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MDk6NDksNDM2IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTY6MDk6NDksNDM3IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6MDk6NTksMjA1IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxNjowOTo1OSwyMDYgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MTg6MzIsNjk3IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0xMiAxNjoxODozMiw2OTggW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6MTg6NDQsMjc0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTEyIDE2OjE4OjQ0LDI3NCBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MTk6NTcsODE0IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoxOTo1Nyw4MjAgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MTk6NTcsODIyIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoxOTo1Nyw4MjQgW1dvcmtlci0zODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MjA6MDMsNTM5IFtXb3JrZXItNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTEyIDE2OjIwOjAzLDU0MCBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MjE6MjksOTk3IFtXb3JrZXItNDQ6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjoyMTozMCwyMTUgW1dvcmtlci00NDogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6MjE6MzAsMjgxIFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoyMTozMCwyODQgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MjE6MzAsMjg2IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoyMTozMCwyODggW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6MjE6MzAsNjIyIFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjoyMTozMCw2MjQgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjoyMTozMCw2MjUgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjIxOjMwLDYyNyBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjIxOjMwLDYyNyBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE2OjIxOjMwLDYyOSBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjoyMTozMCw2ODYgW1dvcmtlci00NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjIxOjMyLDg0NyBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjE6MzIsODQ5IFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjIxOjMyLDg1MSBbV29ya2VyLTQ1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjE6MzIsODUzIFtXb3JrZXItNDU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjIxOjQyLDEwNiBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMTIgMTY6MjE6NDIsMTA2IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE2OjIyOjA0LDQ3NyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0xMiAxNjoyMjowNCw0NzcgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjI0OjIwLDU5NSBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjQ6MjAsNTk3IFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjI0OjIwLDU5OSBbV29ya2VyLTM4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6MjQ6MjAsNjAxIFtXb3JrZXItMzg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjI0OjI3LDg0MSBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNS0xMiAxNjoyNDoyNyw4NDEgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjI4OjQ1LDkzNiBbbWFpbl0gSU5GTyAgby5lLm0yZS5hY3Rpb25zLkV4ZWN1dGVQb21BY3Rpb24gLSBDcmVhdGluZyBuZXcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KKzIwMjAtMDUtMTIgMTY6Mjg6NTIsMzUyIFtXb3JrZXItNDc6IExhdW5jaGluZyBHbGVtbVNlcnZpY2VzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6Mjg6NTIsMzUyIFtXb3JrZXItNDc6IExhdW5jaGluZyBHbGVtbVNlcnZpY2VzICgyKV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY29tcGlsZQorMjAyMC0wNS0xMiAxNjoyOTo0OSwyNzggW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA1LTEyIDE2OjI5OjQ5LDI3OCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxNjoyOTo1OSw0NDEgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMTIgMTY6Mjk6NTksNDQxIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjozNDoxNSw2NzggW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjozNDoxNSw2NzkgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxNjozNDo1Nyw4OTIgW21haW5dIElORk8gIG8uZS5tMmUuYWN0aW9ucy5FeGVjdXRlUG9tQWN0aW9uIC0gQ3JlYXRpbmcgbmV3IGxhdW5jaCBjb25maWd1cmF0aW9uCisyMDIwLTA1LTEyIDE2OjM1OjAxLDc1NCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlcyAoMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjM1OjAxLDc1NCBbV29ya2VyLTU0OiBMYXVuY2hpbmcgR2xlbW1TZXJ2aWNlcyAoMyldIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNvbXBpbGUKKzIwMjAtMDUtMTIgMTY6MzU6MzEsNzY3IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA1LTEyIDE2OjM1OjMxLDc2NyBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6MzU6NDYsOTMwIFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjozNTo0Niw5MzEgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6Mzc6NTYsNzM0IFttYWluXSBJTkZPICBvLmUubTJlLmFjdGlvbnMuRXhlY3V0ZVBvbUFjdGlvbiAtIENyZWF0aW5nIG5ldyBsYXVuY2ggY29uZmlndXJhdGlvbgorMjAyMC0wNS0xMiAxNjozODowMSw4NzEgW1dvcmtlci01MDogTGF1bmNoaW5nIEdsZW1tU2VydmljZXMgKDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjozODowMSw4NzIgW1dvcmtlci01MDogTGF1bmNoaW5nIEdsZW1tU2VydmljZXMgKDQpXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjb21waWxlCisyMDIwLTA1LTEyIDE2OjQwOjQ2LDUyNSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjQwOjQ2LDUyNSBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTEyIDE2OjQwOjU1LDcyNSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDA6NTUsNzI3IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQwOjU1LDcyOCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDA6NTUsNzMwIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQwOjU1LDk0MyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDA6NTUsOTQ1IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NDA6NTUsOTQ4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo0MDo1NSw5NTEgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0MDo1NSw5NTIgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjo0MDo1NSw5NTIgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6NDA6NTUsOTY4IFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo0MTowMyw1OTcgW1dvcmtlci01NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTEyIDE2OjQxOjAzLDU5NyBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxNjo0MzowOSwxMzMgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQzOjA5LDEzNSBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQzOjA5LDEzNSBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDM6MDksMTM3IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NDM6MTQsODc3IFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjo0MzoxNCw4NzcgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6NDQ6NTAsNTMwIFtXb3JrZXItNTM6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjo0NDo1MCw2MjggW1dvcmtlci01MzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE2OjQ0OjUwLDYyOCBbV29ya2VyLTUzOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxNjo0NDo1MCw2MjkgW1dvcmtlci01MzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxNjo0NDo1MCw3NzggW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQ0OjUwLDc4MCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0NDo1MCw3ODEgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQ0OjUwLDc4MyBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo0NDo1MSwxMjEgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjQ0OjUxLDEyNiBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjQ0OjUxLDEyOCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDQ6NTEsMTMwIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTY6NDQ6NTEsMTMxIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTY6NDQ6NTEsMTMxIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE2OjQ0OjUxLDEzNiBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTY6NDQ6NTksNTc0IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjo0NDo1OSw1NzQgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6NDU6MTQsNDkwIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NDU6MTQsNDkwIFtXb3JrZXItNTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6NDU6MjQsODg0IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNjo0NToyNCw4ODQgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTY6NTE6NDksNjgxIFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NTE6NDksNjgxIFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTY6NTI6MDEsMDEzIFtXb3JrZXItNTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNjo1MjowMSwwMTQgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNjo1MjowMSwwMTUgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjUyOjAxLDAxNyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE2OjUyOjAxLDAxNyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE2OjUyOjAxLDAxNyBbV29ya2VyLTU4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxNjo1MjowMSwwMjIgW1dvcmtlci01ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE2OjUyOjEwLDg3MyBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NTI6MTAsODczIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjU0OjAxLDA5MiBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNS0xMiAxNjo1NDowMSwwOTIgW1dvcmtlci02MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjU0OjE1LDMyOSBbV29ya2VyLTYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTIgMTY6NTQ6MTUsMzI5IFtXb3JrZXItNjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDE2OjU1OjM2LDU3MiBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA1LTEyIDE3OjEwOjE2LDg1MCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxNzoxMDoxNiw4NTQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxNzoxMDoxNiw4NTcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTc6MTA6MTYsODYwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTc6MTA6MTgsMDAwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE3OjEwOjE4LDAwMyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTc6MTA6MTgsMDA2IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE3OjEwOjE4LDAwOSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTc6MTA6MjYsNjU4IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xMiAxNzoxMDoyNiw2NjMgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTk6MDU6NDQsMzc0IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTk6MDU6NDQsMzc0IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTIgMTk6MDU6NTAsNjk2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MCw2OTggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1MCw3MDAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUwLDcwMyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUxLDA5NCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTEsMDk2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1MSwwOTcgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUxLDA5OSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTEsMzA2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MSwzMDkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTEsMzExIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MSwzMTMgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTEsODA3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1MSw4MDkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUxLDgxMSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTEsODE1IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1MiwwMzEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUyLDAzMiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA1OjUyLDAzNCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTIsMDM5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTIsMDUwIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOTowNTo1MiwwNTEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOTowNTo1MiwwOTEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA1OjUyLDQyOCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA1OjUyLDQyOSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTIsNDI5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA1OjUyLDQ1NSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDU6NTIsNDYxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDU6NTIsNDYyIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowNTo1Miw0NjkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowNTo1OSwwNjEgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE5OjA1OjU5LDA2MSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxOTowNjo0OCw2MDggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA2OjQ4LDYxMCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA2OjQ4LDYxMiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDY6NDgsNjEzIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDY6NTUsMDU5IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAxOTowNjo1NSwwNTkgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMTk6MDg6MTUsODczIFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDg6MTUsODc2IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOTowODoxNSw4NzkgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDg6MTUsOTExIFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDg6MTUsOTEzIFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOTowODoxNSw5MTYgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzYsNzczIFtXb3JrZXItMjU6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxOTowOTozNywwNjEgW1dvcmtlci0yNTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzcsMjAxIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozNywyMDQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzcsMjA2IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozNywyMTMgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzcsNjg3IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozNyw3NDIgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTozNyw3NTQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM3LDg2NyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM3LDg2NyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE5OjA5OjM3LDg2OCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxOTowOTozNyw4ODggW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM5LDEwNyBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzksMTA5IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTozOSwxMTEgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM5LDExNCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksMjM1IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozOSwyMzggW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksMjQwIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozOSwyNDIgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksNjA3IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTozOSw2MjMgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM5LDYyNSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzksNjI5IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTozOSw3OTUgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjM5LDgwNSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjA5OjM5LDgxMiBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6MzksODEzIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6MzksODE0IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOTowOTozOSw4MTQgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOTowOTozOSw4MTkgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjA5OjQwLDA2OCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA5OjQwLDA2OSBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MDk6NDAsMDY5IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDE5OjA5OjQwLDA3NCBbV29ya2VyLTE5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MDk6NDAsMDc2IFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MDk6NDAsMDgwIFtXb3JrZXItMTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOTowOTo0MCwwODIgW1dvcmtlci0xOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOTowOTo0NSwxMjcgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDE5OjA5OjQ1LDEyNyBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAxOToxMDozMSw1NzMgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xMiAxOToxMTozMSwwMDUgW1dvcmtlci0xMTogQnVpbGRpbmcgd29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzEsMDA5IFtXb3JrZXItMTE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzEsMDEyIFtXb3JrZXItMTE6IEJ1aWxkaW5nIHdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjMxLDAxNCBbV29ya2VyLTExOiBCdWlsZGluZyB3b3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjMyLDk1NCBbV29ya2VyLTExOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozMiw5NTggW1dvcmtlci0xMTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjMyLDk2MiBbV29ya2VyLTExOiBCdWlsZGluZyB3b3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozMiw5NjQgW1dvcmtlci0xMTogQnVpbGRpbmcgd29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM2LDQ2MyBbV29ya2VyLTE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xMiAxOToxMTozNiw2ODAgW1dvcmtlci0xOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzYsNjgxIFtXb3JrZXItMTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzYsNjgxIFtXb3JrZXItMTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOToxMTozNiw4OTcgW1dvcmtlci0xOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xMiAxOToxMTozNywwOTAgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM3LDA5MyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozNywwOTUgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM3LDA5NyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozNyw1MTggW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM3LDUyMiBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM3LDUyNCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzcsNTI1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzcsNTI1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTIgMTk6MTE6MzcsNTI2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTEyIDE5OjExOjM3LDU2MCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzgsODcwIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozOCw4NzIgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM4LDg3NCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzgsODc2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozOSwwNzEgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM5LDA3NSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozOSwwNzYgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM5LDA3OSBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozOSw0OTYgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjM5LDUxMyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzksNTE2IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozOSw1MTkgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjM5LDc1MCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6MzksNzUzIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMTk6MTE6MzksNzU0IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTozOSw3NzIgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTozOSw3NzMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDE5OjExOjM5LDc3MyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTEyIDE5OjExOjM5LDc3OCBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMTk6MTE6NDAsMDE1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MTE6NDAsMDE1IFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAxOToxMTo0MCwwMTYgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMTk6MTE6NDAsMDIwIFtXb3JrZXItMTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAxOToxMTo0MCwwMjMgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAxOToxMTo0MCwwMjQgW1dvcmtlci0xMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDE5OjExOjQwLDAyNyBbV29ya2VyLTEwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDE5OjExOjQ5LDI3MiBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTk6MTE6NDksMjczIFtXb3JrZXItNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAxOToxMjowMSwxNTAgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMTk6MTI6MDEsMTUxIFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMjE6NDU6MTcsOTc0IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMTo0NToxNyw5OTMgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAyMTo0NToxNyw5OTYgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDIxOjQ1OjE3LDk5OCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDIxOjQ5OjE3LDA3NCBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMTo0OToxNywxMTkgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDIxOjQ5OjE3LDEyMSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMTo0OToxNywxMjMgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDIxOjQ5OjI2LDU2OCBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAyMTo0OToyNiw1NjkgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAyMTo1MDozOSw4NjAgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAyMTo1MDozOSw4NjAgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAyMTo1MDo1NCw2NDggW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTEyIDIxOjUwOjU0LDY0OCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xMiAyMTo1NjoxNiw4NjUgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAyMTo1NjoxNiw4NjUgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xMiAyMTo1NjoyNywwMjcgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDIxOjU2OjI3LDAzMCBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTEyIDIxOjU2OjI3LDAzMiBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTIgMjE6NTY6MjcsMDM2IFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTIgMjE6NTY6MzIsOTMzIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xMiAyMTo1NjozMiw5MzMgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTIgMjI6MDQ6MDEsNTUzIFtXb3JrZXItMzU6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBzdGFydGVkCisyMDIwLTA1LTEyIDIyOjA0OjA5LDUyMCBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTEyIDIyOjA0OjA5LDYzMCBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA0OjA5LDYzMSBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMjI6MDQ6MDksNjMxIFtXb3JrZXItMzU6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA0OjE0LDM4NSBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMKKzIwMjAtMDUtMTIgMjI6MDQ6MTQsMzg2IFtXb3JrZXItMzU6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9UZXN0cy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvVGVzdHMvc3JjCisyMDIwLTA1LTEyIDIyOjA0OjE1LDA3NiBbV29ya2VyLTM1OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAxMyBzZWMKKzIwMjAtMDUtMTIgMjI6MDU6MTksMzc4IFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMjI6MDU6MTksMzc5IFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xMiAyMjowNToxOSwzODAgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMjI6MDU6MTksMzg3IFtXb3JrZXItMzU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xMiAyMjowNToxOSwzOTEgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xMiAyMjowNToxOSwzOTIgW1dvcmtlci0zNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTEyIDIyOjA1OjE5LDM5NCBbV29ya2VyLTM1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTEyIDIyOjA1OjM0LDY5NyBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTIgMjI6MDU6MzQsNjk3IFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTEyIDIyOjA4OjE0LDYyMSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA4OjE0LDYzNSBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMjI6MDg6MTQsNjM4IFtXb3JrZXItMzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA4OjE0LDY2MCBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTEyIDIyOjA4OjE0LDY2MyBbV29ya2VyLTM0OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTIgMjI6MDg6MTQsNjY1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDA5OjUyOjAxLDI2NiBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTE1IDA5OjU5OjQ3LDIxMCBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTE1IDExOjMzOjM4LDUwNSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTE6MzM6MzgsNTA2IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDExOjMzOjU4LDYzMCBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDExOjMzOjU4LDYzMCBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDExOjM0OjA4LDUzMiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MDgsNTM0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjA4LDUzNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MDgsNTM5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjEyLDI5NyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzMjowLjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTE6MzQ6MTUsOTEzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNSw5MTUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNSw5MTcgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjE1LDkxOSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE2LDAyOSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMDMxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNiwwMzQgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjE2LDAzNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMTM3IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNiwxMzkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMTQxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNiwxNDMgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMjQ0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNiwyNDYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE2LDI0OCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTYsMjUwIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNiw1NjkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA1LTE1IDExOjM0OjE3LDAwOSBbV29ya2VyLTI2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczpqYXI6amF2YWRvYzowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI2NSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDUtMTUgMTE6MzQ6MTcsMDkxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNywwOTMgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNDoxNywwOTUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDExOjM0OjE3LDA5NyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDExOjM0OjE3LDM1NyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTE1IDExOjM0OjE3LDQxNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDExOjM0OjE3LDQxNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTcsNDE3IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDExOjM0OjE3LDgyMCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTE6MzQ6MTcsODIyIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTE6MzQ6MTcsODI0IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxMTozNDoxNyw4MjYgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxMTozNTowOCwxNjQgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDExOjM1OjA4LDE2NSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxMTozNjoxMyw1NDEgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xNSAxMTozNjoxMyw1NDEgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxMTozNjoyNiwyMzAgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA1LTE1IDExOjM2OjI2LDIzMCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxMTo0MDo0MSwwNTMgW1dvcmtlci0yMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTE6NDA6NDEsMDUzIFtXb3JrZXItMjE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTE6NDA6NDEsMDU0IFtXb3JrZXItMjE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoxMCw0MTcgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xNSAxNDo0MjoxMiw4MzAgW1dvcmtlci05OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoxMiw4MzcgW1dvcmtlci05OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQyOjEyLDgzOCBbV29ya2VyLTk6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoxMiw4MzkgW1dvcmtlci05OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MTgsMzM2IFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTQ6NDI6MTksNTI2IFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE0OjQyOjE5LDY4NiBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA1LTE1IDE0OjQyOjIwLDIxNCBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNS0xNSAxNDo0MjoyMCwzMTAgW1dvcmtlci02OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjAsMzExIFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjAsMzExIFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoyMCwzMTIgW1dvcmtlci02OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQyOjIwLDg0NiBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTQ6NDI6MjEsMzMwIFtXb3JrZXItNjogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTE1IDE0OjQyOjIxLDcxNCBbV29ya2VyLTY6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTE1IDE0OjQyOjIyLDQ3OSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyMiw0ODIgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyMiw0ODUgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjIsNDg2IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjIsOTg5IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjIyLDk5MSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjIsOTkzIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjIzLDAwMSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjMsMDAzIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxNDo0MjoyMywwMDQgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNS0xNSAxNDo0MjoyMywwMzcgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjQsMjMyIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI0LDIzNCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNCwyMzYgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjQsMjM4IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjI0LDQxMiBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyNCw0MTQgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNCw0MTYgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjQsNDE4IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDI6MjUsMjA4IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQyOjI1LDI3NCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNSwyNzYgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjUsNTU5IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjI3LDI0MCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyNywyODcgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjI3LDI4OSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyNyw0NDEgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQyOjI3LDQ0MiBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw0NDIgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTE1IDE0OjQyOjI3LDQ0OSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0MjoyNyw3NTMgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQyOjI3LDc1MyBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw3NTQgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw3NTUgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw3NjEgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzYzIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0MjoyNyw3NjggW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDI6MjcsNzcwIFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Mzo0MiwzNTcgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQzOjQyLDM2MCBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQzOjQyLDM2MiBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsMzY0IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsODEyIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0Mzo0Miw4MTQgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQzOjQyLDgxNiBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsODE5IFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Mzo0Miw5MjQgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQzOjQyLDkyNiBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQzOjQyLDkyNyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDM6NDIsOTMwIFtXb3JrZXItMTE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDM6NTAsMzU3IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTQ6NDM6NTAsMzU4IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTUgMTQ6NDM6NTcsOTUzIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xNSAxNDo0Mzo1Nyw5NTMgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTQ6NDY6NDIsNjM1IFtXb3JrZXItNzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDY6NDIsNjM3IFtXb3JrZXItNzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ2OjQyLDYzOSBbV29ya2VyLTc6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ2OjQyLDY0MSBbV29ya2VyLTc6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0NzoxNCwxMDcgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDUtMTUgMTQ6NDc6MTQsMTA3IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxNDo0NzozMSw5OTQgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0NzozMSw5OTYgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ3OjMxLDk5OCBbV29ya2VyLTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ3OjMyLDAwMCBbV29ya2VyLTA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDc6MzIsMTkxIFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDc6MzIsMTkzIFtXb3JrZXItMDogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ3OjMyLDE5NSBbV29ya2VyLTA6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ3OjMyLDE5NyBbV29ya2VyLTA6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0NzozMiw1NTIgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0NzozMiw1NTMgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0NzozMiw1NTQgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNDo0NzozMiw1NTYgW1dvcmtlci0wOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0Nzo1NCwyNjggW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA1LTE1IDE0OjQ3OjU0LDI2OCBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTQ6NDg6MDUsMTk1IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDg6MDUsMjAwIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MDUsMjAxIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDg6MDUsMjA0IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MTgsMDU3IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTQ6NDg6MTgsMDU3IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTQ6NDg6MjgsMjQ4IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE0OjQ4OjI4LDI1MSBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNDo0ODoyOCwyNTUgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTQ6NDg6MjgsMjU3IFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE0OjQ4OjI5LDkzNiBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjI5LDkzOCBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6MjksOTQxIFtXb3JrZXItMTE6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjI5LDk0MSBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5NjUgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5NjggW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE0OjQ4OjI5LDk3MCBbV29ya2VyLTExOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODoyOSw5NzAgW1dvcmtlci0xMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNjc2IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODo0Niw2NzcgW1dvcmtlci0xOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNjc5IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNjc5IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNjk5IFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNDo0ODo0Niw3MDEgW1dvcmtlci0xOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNzAyIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTQ6NDg6NDYsNzAyIFtXb3JrZXItMTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTU6Mjg6MjEsMDg3IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTU6Mjg6MjEsMDg5IFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNToyODoyMSwwOTMgW1dvcmtlci0xNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTU6Mjg6MjEsMDkzIFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDExNiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDEyMCBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTU6Mjg6MjEsMTIxIFtXb3JrZXItMTU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE1OjI4OjIxLDEyMiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNjo1ODozMCwxNTUgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNS0xNSAxNjo1ODozMiwxMzEgW1dvcmtlci00OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNjo1ODozMiwxMzEgW1dvcmtlci00OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE2OjU4OjMyLDEzMyBbV29ya2VyLTQ6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNjo1ODozMiwxMzMgW1dvcmtlci00OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6MDQ6MDcsNjYxIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMTUgMTc6MDQ6MDksNjcwIFtXb3JrZXItMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6MDQ6MDksNjcyIFtXb3JrZXItMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzowNDowOSw2NzIgW1dvcmtlci0xOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6MDQ6MDksNjcyIFtXb3JrZXItMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU2OjU3LDc2OSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIwLTA1LTE1IDE3OjU3OjAwLDMyOSBbV29ya2VyLTI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU3OjAwLDMzMiBbV29ya2VyLTI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6NTc6MDAsMzMzIFtXb3JrZXItMjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU3OjAwLDMzNSBbV29ya2VyLTI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1ODoxNyw1NDcgW1dvcmtlci03OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXMyOjAuMC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNS0xNSAxNzo1ODoxOSwwODIgW1dvcmtlci03OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTUgMTc6NTg6MTksMzg2IFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE3OjU4OjE5LDQ2NiBbV29ya2VyLTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1ODoxOSw0NjcgW1dvcmtlci03OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxNzo1ODoxOSw0NjggW1dvcmtlci03OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU4OjE5LDQ2OSBbV29ya2VyLTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6NTg6MjAsMzk2IFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTc6NTg6MjAsNzk0IFtXb3JrZXItNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDAsMDY4IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTc6NTk6MDAsNTIzIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAwLDUyNSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAwLDUyOCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMCw1MjkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMCw3NzkgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDAsODA1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMCw4MDggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDAsODEwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMCw4MTEgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE3OjU5OjAwLDgxMiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE3OjU5OjAwLDgzOCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMSwxODUgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTc6NTk6MDEsNTQ0IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAxLDU0NiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMSw1NDggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDEsNTUwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAxLDc2OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxwb20ueG1sLgorMjAyMC0wNS0xNSAxNzo1OTowMiwwMDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDIsMDAxIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDIsMDAyIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAyLDAwNCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAyLDIwMCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTc6NTk6MDIsNTA1IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE3OjU5OjAyLDUwNyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxNzo1OTowMiw1MDggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTc6NTk6MDIsNTEwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAyLDY4NyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMiw2OTUgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAyLDY5NyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMiw3MTMgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAyLDcxNCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNS0xNSAxNzo1OTowMiw3MTQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAyLDcyMCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMiw5NjQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE3OjU5OjAzLDAwNiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTc6NTk6MDMsMDA2IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU5OjAzLDAwNiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU5OjAzLDAwNyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE3OjU5OjAzLDA5MiBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMywwOTQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjAzLDA5NyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxNzo1OTowMywxMDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE3OjU5OjEwLDM0MCBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0cworMjAyMC0wNS0xNSAxNzo1OToxMCwzNDEgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODowMDo0MCwyOTYgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE4OjAwOjQwLDM3OCBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQwLDM4MiBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDAsMzgzIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDAsMzg1IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MCw1NzAgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNS0xNSAxODowMDo0MCw2ODYgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MCw2ODggW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MCw2ODkgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MCw2OTEgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MCw4NzIgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxwb20ueG1sLgorMjAyMC0wNS0xNSAxODowMDo0MCw5NTMgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MCw5NTQgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQwLDk1NiBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQwLDk1NyBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMTEyIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA1LTE1IDE4OjAwOjQxLDIzNiBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQxLDIzOCBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDIzOSBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQxLDI0MSBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDI3NSBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAwOjQxLDI4MyBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMDo0MSwyODQgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MSwyODkgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMzc3IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDM3NyBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjAwOjQxLDM3NyBbV29ya2VyLTM6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMzc4IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODowMDo0MSwzODggW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMDo0MSwzOTAgW1dvcmtlci0zOiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMzkyIFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDA6NDEsMzk0IFtXb3JrZXItMzogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjAxOjA4LDQ3MSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA1LTE1IDE4OjAxOjA4LDQ3MSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODowMToxOSwwNzIgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xNSAxODowMToxOSwwNzMgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODowMToyOSw0MDcgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA1LTE1IDE4OjAxOjI5LDQwOCBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MDI6MjcsMjA3IFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDUtMTUgMTg6MDI6MjcsMjA4IFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjAyOjQ1LDg0NCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTUgMTg6MDI6NDUsODQ0IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjAzOjUyLDE4MCBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowMzo1MiwxODIgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODowMzo1MiwxODMgW1dvcmtlci04OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDM6NTIsMTg0IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDM6NTIsMjA2IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAzOjUyLDIwNyBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDM6NTIsMjA5IFtXb3JrZXItODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjAzOjUyLDIxMSBbV29ya2VyLTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MDM6NTksNjA1IFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTE1IDE4OjAzOjU5LDYwNSBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjA4OjA2LDczNyBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDUtMTUgMTg6MDg6MDYsNzM4IFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xNSAxODowODoxNyw4ODUgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDg6MTcsODg3IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODowODoxNyw4OTAgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MDg6MTcsODkzIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODowODoxNyw4OTQgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE4OjA4OjE3LDg5NCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE4OjA4OjE3LDk0MCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODowODoyMiw2OTkgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTE1IDE4OjA4OjIyLDY5OSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODoxMjo0OCw1NTkgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA1LTE1IDE4OjEyOjQ4LDU2MCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxODoxMzo1OCw2NjkgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xNSAxODoxMzo1OCw2NzAgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNS0xNSAxODoxNDowOCw2NzkgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjE0OjA4LDY4MSBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjE0OjA4LDY4MiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MTQ6MDgsNjg0IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MTQ6MDgsNjg1IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTUgMTg6MTQ6MDgsNjg1IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMyCisyMDIwLTA1LTE1IDE4OjE0OjA4LDY5NyBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MTQ6MTMsOTYwIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNS0xNSAxODoxNDoxMyw5NjEgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MTk6MDAsOTM4IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE4OjE5OjAwLDkzOSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTUgMTg6MTk6MTAsMzQyIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTg6MTk6MTAsMzQzIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6MjM6NTcsMDk2IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTg6MjM6NTcsMDk2IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6Mjc6MzMsOTY2IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozMyw5NjcgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI3OjMzLDk2OSBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjc6MzMsOTcwIFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozNCwxMDQgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI3OjM0LDEwNiBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozNCwxMDggW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI3OjM0LDExMCBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozNCwyMDkgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI3OjM0LDIxMiBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMjEzIFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCwyMTUgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI3OjM0LDM0NSBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMzQ3IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsMzQ4IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCwzNTAgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozNCw0MTcgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODoyNzozNCw0MTcgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjI3OjM0LDQxOCBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODoyNzozNCw0MTkgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mjc6MzQsNDI3IFtXb3JrZXItMjQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyNzozNCw0MjkgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyNzozNCw0MzEgW1dvcmtlci0yNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI3OjM0LDQzMyBbV29ya2VyLTI0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI3OjQwLDY3NyBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTg6Mjc6NDAsNjc3IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjI4OjA2LDAyOCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDUtMTUgMTg6Mjg6MDYsMDI4IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDE4OjI4OjExLDYxOSBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNS0xNSAxODoyODoxMSw2MTkgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjI4OjMzLDI2NCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsMjY2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI4OjMzLDI2NyBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsMjY4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI4OjMzLDY2NCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsNjY3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsNjY4IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyODozMyw2NzAgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODoyODozMyw3OTQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjI4OjMzLDc5NiBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mjg6MzMsNzk3IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODoyODozMyw3OTkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjI4OjM5LDEwNSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA1LTE1IDE4OjI4OjM5LDEwNSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjMwOjAyLDc1MiBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphcgorMjAyMC0wNS0xNSAxODozMDowMiw3NTIgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDE4OjMwOjA5LDM5MSBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6MzA6MDksMzk0IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODozMDowOSwzOTYgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjMwOjA5LDM5OCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6MzA6MTcsNTExIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTg6MzA6MTcsNTEyIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTg6Mzk6MTMsNjc2IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTg6Mzk6MTMsNjc2IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMTE2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCwxMTggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjI0LDExOSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMTIxIFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCwyMjYgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjM5OjI0LDIyOCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCwyMjkgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjM5OjI0LDIzMSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCwyNjYgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjM5OjI0LDI2OCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMjY5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCwyNzEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjI0LDM1MSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMzU0IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsMzU2IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCwzNTggW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCw0OTQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOToyNCw0OTQgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjM5OjI0LDQ5NCBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOToyNCw0OTUgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6MjQsNDk5IFtXb3JrZXItMjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOToyNCw1MDEgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxODozOToyNCw1MDMgW1dvcmtlci0yNTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE4OjM5OjI0LDUwNSBbV29ya2VyLTI1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjI5LDQ4MiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfUHJvamVjdC1UZXN0c10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMKKzIwMjAtMDUtMTUgMTg6Mzk6MjksNDgyIFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Qcm9qZWN0LVRlc3RzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA1LTE1IDE4OjM5OjUwLDI3MCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOTo1MCwyNzIgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjUwLDI3MyBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxODozOTo1MCwyNzUgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE4OjM5OjUwLDMxNiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjM5OjUwLDMxOCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTg6Mzk6NTAsMzIwIFtXb3JrZXItMjU6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjM5OjUwLDMyMCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMzMgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMzQgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA1LTE1IDE4OjM5OjUwLDMzNSBbV29ya2VyLTI1OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNS0xNSAxODozOTo1MCwzMzUgW1dvcmtlci0yNTogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDUtMTUgMTk6NDc6MzYsNDIxIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDUtMTUgMTk6NDg6NTYsNzQ2IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE5OjQ4OjU2LDc0OCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjQ4OjU2LDc1MSBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0ODo1Niw3NTIgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0OTowMSw4MDggW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDUtMTUgMTk6NDk6MDEsODA5IFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNS0xNSAxOTo0OToxMSw2MDcgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTk6NDk6MTIsMTU5IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OToxMiwxNjEgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NDk6MTIsMTYzIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OToxMiwxNjUgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NDk6MTIsNTQ2IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OToxMiw1NDggW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjQ5OjEyLDU1MCBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MTIsNTUyIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0OToxNyw2MDIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyCisyMDIwLTA1LTE1IDE5OjQ5OjE3LDYwMiBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDUtMTUgMTk6NDk6MzgsMDMzIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczI6MC4wLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDU5MiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OTozOSw1OTQgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDU5NiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OTozOSw1OTggW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDYwMiBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTUgMTk6NDk6MzksNjA0IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDUtMTUgMTk6NDk6MzksNjMyIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE5OjQ5OjM5LDg3OSBbV29ya2VyLTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNS0xNSAxOTo0OTozOSw4ODEgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo0OTozOSw4ODMgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NDk6MzksODg1IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDUtMTUgMTk6NTA6MDgsMjgyIFtXb3JrZXItNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTk6NTA6MDgsMjgyIFtXb3JrZXItNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA1LTE1IDE5OjUwOjE5LDY5MCBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJccG9tLnhtbC4KKzIwMjAtMDUtMTUgMTk6NTA6MjAsMDAzIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA1LTE1IDE5OjUwOjIwLDAwNSBbV29ya2VyLTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNS0xNSAxOTo1MDoyMCwwMDcgW1dvcmtlci02OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDUtMTUgMTk6NTA6MjAsMDEwIFtXb3JrZXItNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA1LTE1IDE5OjUwOjI4LDczOCBbV29ya2VyLTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXIKKzIwMjAtMDUtMTUgMTk6NTA6MjgsNzM4IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxNTozMjoxNSwxOTcgW1dvcmtlci03OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNi0xMiAxNjoxNDoxNCwwMTEgW1dvcmtlci0zOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDYtMTIgMTg6Mzk6MjEsNDY1IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjIxLDQ2NyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MjEsNDY5IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjIxLDQ3MCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MjUsNzgzIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjI1LDc4NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xMiAxODozOToyNSw3ODcgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTg6Mzk6MjUsNzg5IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjMwLDE0MyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxwb20ueG1sLgorMjAyMC0wNi0xMiAxODozOTozMCw5MzggW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTg6Mzk6MzAsOTQwIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzAsOTQxIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMwLDk0MyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE4OjM5OjMxLDM3MSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxODozOTozMSwzNzMgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzEsMzc2IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMxLDM3OCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxODozOTozMSw3MjQgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTIgMTg6Mzk6MzIsNTY1IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMyLDYwMCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzIsNjAyIFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE4OjM5OjMyLDYwNCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsMTQ1IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNi0xMiAxODozOTozMywyMzAgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTEyIDE4OjM5OjMzLDIzMSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozMywyMzEgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozMywyMzIgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozMyw1MTIgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsNTE2IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xMiAxODozOTozMyw1MTggW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTg6Mzk6MzMsNTE5IFtXb3JrZXItMjg6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxODozOTozOSwyNzggW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTEyIDE4OjM5OjM5LDI3OCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozOSwyNzkgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODozOTozOSwyNzkgW1dvcmtlci0yODogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xMiAxODo1MTo0MCw2ODUgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTEyIDE4OjUxOjQwLDY4NiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxOTozODoyNiw5NzYgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTEyIDE5OjM4OjI2LDk3NyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxOTo0Mjo1NywxODggW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDYtMTIgMTk6NDI6NTcsMTg5IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxOTo0MzowOSw1ODMgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTEyIDE5OjQzOjA5LDU4MyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxOTo0NDo1MywxODAgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xMiAxOTo0NDo1MywxODAgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxOTo0NTowNywwMzUgW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjA3LDAzNSBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xMiAxOTo0NTozMSw1MDMgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjMxLDUxNiBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTozMSw1MTcgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjMxLDUxOSBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTozMSw3MjEgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjMxLDcyMiBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjMxLDcyNSBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTk6NDU6MzEsNzI2IFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTk6NDU6MzEsOTUzIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxwb20ueG1sLgorMjAyMC0wNi0xMiAxOTo0NTozMiwyODggW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTEyIDE5OjQ1OjMyLDI5MCBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTk6NDU6MzIsMjkxIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxOTo0NTozMiwyOTMgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDQzMSBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTk6NDU6NDIsNDMzIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDQzNCBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTk6NDU6NDIsNDM3IFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjQyLDU5OCBbV29ya2VyLTM2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTIgMTk6NDU6NDIsNjAwIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTIgMTk6NDU6NDIsNjAxIFtXb3JrZXItMzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xMiAxOTo0NTo0Miw2MDMgW1dvcmtlci0zNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xMiAxOTo0NTo1MCwzMDcgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTEyIDE5OjQ1OjUwLDMwNyBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNSAwOToyNzowOCw2NzMgW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNi0xNSAyMTozMDowOCw0MzIgW1dvcmtlci0xMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNSAyMTozMDowOCw0MzQgW1dvcmtlci0xMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE1IDIyOjA0OjU2LDYwMyBbV29ya2VyLTEyNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE1IDIyOjA0OjU2LDYwMyBbV29ya2VyLTEyNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTUgMjI6MDY6MDYsMDM2IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTUgMjI6MDY6MDYsMDM5IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE1IDIyOjA2OjA2LDA0MiBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE1IDIyOjA2OjA2LDA0NCBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjowNyw3MjggW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNSAyMjowNjowNyw3MzAgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjowNyw3MzIgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNSAyMjowNjowNyw3MzQgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjowOSwwMjYgW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNSAyMjowNjowOSwwMjggW1dvcmtlci0xMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE1IDIyOjA2OjA5LDAzMCBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE1IDIyOjA2OjA5LDAzMiBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTUgMjI6MDY6MDksMjA1IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTUgMjI6MDY6MDksMjA3IFtXb3JrZXItMTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE1IDIyOjA2OjA5LDIwOSBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE1IDIyOjA2OjA5LDIxMSBbV29ya2VyLTEyNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNSAyMjowNjoxNyw0MTUgW1dvcmtlci0xMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNSAyMjowNjoxNyw0MTUgW1dvcmtlci0xMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE1IDIyOjEzOjU4LDA2MiBbV29ya2VyLTEyODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE1IDIyOjEzOjU4LDA2MiBbV29ya2VyLTEyODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMDg6NTc6NTAsMTMyIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDYtMTYgMDg6NTc6NTEsNjY0IFtXb3JrZXItMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjI4OjQ5LDI2NiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mjg6NDksMjY4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NDksMjcwIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOToyODo0OSwyNzIgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOToyODo1MiwzOTUgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjUyLDM5NyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTIsMzk5IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOToyODo1Miw0MDEgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjUzLDIxMyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mjg6NTMsMjE1IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjUzLDIxNyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mjg6NTMsMjE4IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjU1LDcxMSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTYgMDk6Mjg6NTUsNzY3IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTYgMDk6Mjg6NTUsNzczIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjI4OjU2LDU5MiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE2IDA5OjI4OjU2LDU5NiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOToyODo1Niw4OTkgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjU2LDkwMCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjI4OjU2LDkwMiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6Mjg6NTYsOTA0IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6Mjg6NTYsOTA1IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOToyODo1Niw5MDYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOToyODo1Niw5NjAgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjI4OjU3LDk4OSBbV29ya2VyLTE0OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE2IDA5OjI4OjU3LDk5MyBbV29ya2VyLTE0OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOToyODo1OCwwMTcgW1dvcmtlci0xNDogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDYtMTYgMDk6MzE6MzcsOTE5IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozMTozNyw5MjAgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzcsOTIyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozMTozNyw5MjQgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzgsNjcxIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNiAwOTozMTozOCw3MzIgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNiAwOTozMTozOCw3MzggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzgsOTQxIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozMTozOCw5NDUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOTozMTozOCw5NDcgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjMxOjM4LDk0OSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjMxOjM4LDk1MCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzgsOTUwIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzgsOTU2IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozMTozOSw5NDMgW1dvcmtlci0yMTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNiAwOTozMTozOSw5NTMgW1dvcmtlci0yMTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6MzE6MzksOTc3IFtXb3JrZXItMjE6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIGphdmFkb2MgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA2LTE2IDA5OjMyOjAxLDcxOSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6MzI6MDEsNzE5IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDA5OjMzOjExLDkwMSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA2LTE2IDA5OjMzOjExLDkwMSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDA5OjMzOjMxLDkzMCBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6MzM6MzEsOTMyIFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOTozMzozMSw5MzQgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjMzOjMxLDkzNiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6MzM6NDYsODIzIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTozMzo0Niw4MjMgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMDk6Mzc6MTMsNjI5IFtXb3JrZXItMTQ6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6Mzc6MTMsNjg2IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozNzoxMyw2ODggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOTozNzoxMyw2ODkgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjM3OjEzLDY5MSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjM3OjEzLDY5MiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6Mzc6MTMsNjkyIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMDk6Mzc6MTMsNzAzIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTozNzozMyw3NjUgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjM3OjMzLDc2NSBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAwOTozODoyOCw4NDMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE2IDA5OjM4OjI4LDkwNSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTozODozOSw0MzYgW1dvcmtlci0yMjogTG9hZGluZyBwb20ueG1sXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTozODo0MCwwNjIgW1dvcmtlci0yMjogTG9hZGluZyBwb20ueG1sXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvSnNvblRyYXZlcnNlLy9Kc29uVHJhdmVyc2UtLnBvbQorMjAyMC0wNi0xNiAwOTozODo0MCwwNzUgW1dvcmtlci0yMjogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6IGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE2IDA5OjQxOjMxLDI4OSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTYgMDk6NDE6MzEsMzM5IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTYgMDk6NDE6MzEsMzQzIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjQxOjMxLDQ2MyBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NDE6MzEsNDY0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NDE6MzEsNDY2IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTo0MTozMSw0NjggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOTo0Mjo0OSw4NjIgW21haW5dIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTYgMDk6NDI6NDksODY3IFttYWluXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo0MzowNCw0MzkgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE2IDA5OjQzOjA0LDQ5MiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo0MzowNCw0OTQgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo0MzowNCw1OTggW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjQzOjA0LDYwMCBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDA5OjQzOjA0LDYwMiBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NDM6MDQsNjA0IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NDM6MTUsMzE3IFtXb3JrZXItMjE6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NDM6MTUsMzE5IFtXb3JrZXItMjE6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo0MzoyNyw1MjEgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjQzOjI3LDUyMiBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAwOTo1MjoyOSw3OTIgW1dvcmtlci0xODogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NTI6MjksNzkzIFtXb3JrZXItMTg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NTI6MjksNzkzIFtXb3JrZXItMTg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAwOTo1MjoyOSw3OTQgW1dvcmtlci0xODogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI2LDU0MyBbV29ya2VyLTIwOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE2IDA5OjU2OjI2LDYwNSBbV29ya2VyLTIwOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NTY6MjYsNjA2IFtXb3JrZXItMjA6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI2LDk1MSBbV29ya2VyLTIwOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMDk6NTY6MjYsOTUxIFtXb3JrZXItMjA6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI3LDIwNSBbV29ya2VyLTIwOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjU2OjI3LDgxOCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NTY6MjcsODIxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAwOTo1NjoyNyw4MjMgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDA5OjU2OjI3LDgyNyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NTY6MjgsMDAxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI4LDAwMiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDA5OjU2OjI4LDAwOSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NTY6MjgsMDIwIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMDk6NTY6MjgsMDIxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAwOTo1NjoyOCwwMzkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAwOTo1NjoyOCwwMzkgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjU2OjI4LDAzOSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDA5OjU2OjI4LDA0NSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMDk6NTc6MTIsNDAzIFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAwOTo1NzoxMiw0MDMgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTA6MDQ6MDcsODE0IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNiAxMDowNDowNyw4NTUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDcsODU1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDcsODU1IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMDowNDowOCwxODcgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsMTg4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsMTg4IFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMDowNDowOCw5NTUgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEwOjA0OjA4LDk1OCBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEwOjA0OjA4LDk1OSBbV29ya2VyLTIwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsOTYyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MDgsOTYyIFtXb3JrZXItMjA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMDowNDowOCw5NjMgW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMDowNDowOCw5NjggW1dvcmtlci0yMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEwOjA0OjE3LDk5NiBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTA6MDQ6MTcsOTk3IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDExOjA4OjUwLDU2NSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNTc2IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjA4OjUwLDU3OCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNTc5IFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjA4OjUwLDc3NCBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMTowODo1MCw3NzUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNiAxMTowODo1MCw3NzUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDExOjA4OjUwLDc3OSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNzgxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6MDg6NTAsNzgzIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMTowODo1MCw3ODQgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMTowODo1Niw2MzcgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjA4OjU2LDYzNyBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxMToxNDoyNSw2MDAgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjE0OjI1LDYwMiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMToxNDoyNSw2MDQgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjE0OjI1LDYwNiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMToxNDoyNSw2NjUgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjE0OjI1LDY2NyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjE0OjI1LDY2OSBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6MTQ6MjUsNjcxIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MzEsNTQyIFtXb3JrZXItMzE6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MzEsNjIxIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMToxNDozMSw2MjQgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMToxNDozMSw2MjUgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjE0OjMxLDYyOSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjE0OjMxLDYzMCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MzEsNjMwIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTE6MTQ6MzEsNjQyIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMToxNDo0MSw3NjkgW1dvcmtlci0yOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjE0OjQxLDc3MCBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxMTo1ODo1MSw3MDAgW1dvcmtlci0yODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlczIKKzIwMjAtMDYtMTYgMTE6NTg6NTEsNzM4IFtXb3JrZXItMjg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTE6NTg6NTEsOTkwIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMTo1ODo1MSw5OTEgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMTo1ODo1MSw5OTMgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjU4OjUxLDk5NSBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDExOjU4OjUxLDk5NiBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMyCisyMDIwLTA2LTE2IDExOjU4OjUxLDk5NiBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzMgorMjAyMC0wNi0xNiAxMTo1ODo1MiwwMDQgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDExOjU4OjUyLDI1OCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6NTg6NTIsMjYwIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTE6NTg6NTIsMjYzIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMTo1ODo1MiwyNjYgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxMTo1ODo1MiwyNjcgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjU4OjUyLDI2NyBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDExOjU4OjUyLDI3NSBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTE6NTk6MDYsNTA0IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMTo1OTowNiw1MDQgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTYgMTI6MTM6MDUsODQ2IFtXb3JrZXItMjg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTI6MTM6MDYsMjA3IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEyOjEzOjA2LDIwOSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxMzowNiwyMTEgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTI6MTM6MDYsMjEzIFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDMxMSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxMzowNiwzMTMgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDMxNCBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxMzowNiwzMTYgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDMxNyBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNiAxMjoxMzowNiwzMTcgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDMyOCBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxMzowNiw3NjggW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHBvbS54bWwuCisyMDIwLTA2LTE2IDEyOjEzOjA2LDgwOSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTYgMTI6MTM6MDYsODA5IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDgwOSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDgwOSBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDk2MCBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxMzowNiw5NjEgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjEzOjA2LDk2MiBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxMzowNiw5NjQgW1dvcmtlci0zMjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjE1OjEyLDA5MCBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTI6MTU6MTIsMDkwIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDEyOjE5OjEwLDIyMyBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTI6MTk6MTAsMjI4IFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoxOToxMCwyMjkgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoxOToxMCwyMzAgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEyOjE5OjEwLDIzMSBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjE5OjE1LDMyNSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTI6MTk6MTUsMzI2IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDEyOjIzOjIwLDIyMyBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTI6MjM6MjAsMjI3IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxMjoyMzoyMCwyMjggW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxMjoyMzoyMCwyMzAgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDEyOjIzOjIwLDIzMCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDEyOjIzOjI3LDMxNiBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTI6MjM6MjcsMzE3IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE2IDE1OjE5OjAxLDQxMiBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTU6MTk6MDEsNDE4IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTowMSw0MTkgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTowMSw0MjAgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjAxLDQyMiBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjE5OjAxLDUyMSBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTU6MTk6MDEsNTI0IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTowMSw1MjYgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjE5OjAxLDUyOCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MTk6MDEsNTI5IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTowNiw3ODMgW1dvcmtlci01MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xNiAxNToxOTowNiw3ODQgW1dvcmtlci01MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxNToxOTozNiwxMzcgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjE5OjM2LDE0MCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMTQzIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTozNiwxNDUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjM2LDE0NyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMjMyIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNiAxNToxOTozNiwyMzUgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjM2LDIzNyBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTozNiwyMzggW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjE5OjM2LDIzOSBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNToxOTozNiwzNjQgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjE5OjM2LDM2OCBbV29ya2VyLTUzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMzcwIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MTk6MzYsMzcxIFtXb3JrZXItNTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNToxOTozNiwzNzMgW1dvcmtlci01MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNToyMzowOCw3MDYgW1dvcmtlci01MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xNiAxNToyMzowOCw3MDYgW1dvcmtlci01MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxNToyNjoyNywyNjQgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjI2OjI3LDI2OCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MjY6MjcsMjcxIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNToyNjoyNywyNzIgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjI2OjI3LDI3MyBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTYgMTU6MzA6NTEsODgwIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNiAxNTozMDo1MSw4ODggW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjMwOjUxLDg4OSBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNTozMDo1MSw4OTAgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjMwOjUxLDg5MiBbV29ya2VyLTQ3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNiAxNTozMTowNCwxMDQgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDYtMTYgMTU6MzE6MDQsMTA0IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNiAxNTozMToxOCw2NjIgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE2IDE1OjMxOjE4LDY2NiBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MzE6MTgsNjY4IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjMxOjE4LDY3MSBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTYgMTU6MzE6MTgsNjczIFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjMxOjE4LDczNCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTYgMTU6MzE6MTgsNzM2IFtXb3JrZXItNTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNiAxNTozMToxOCw3MzggW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNiAxNTozMToxOCw3MzkgW1dvcmtlci01NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE2IDE1OjMxOjE4LDc0MCBbV29ya2VyLTU0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE2IDE1OjMxOjM1LDQyNyBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTYgMTU6MzE6MzUsNDI3IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDE4OjEyOjA4LDA4OSBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE3IDE4OjEyOjA4LDA5NyBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjEyOjA4LDA5OSBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEyOjA4LDEwMSBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjEyOjA4LDEwMiBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEyOjA4LDIyMSBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE3IDE4OjEyOjA4LDIyMyBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjEyOjA4LDIyNCBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxODoxMjowOCwyMjUgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxMjowOCwyMjggW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjc0IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEyOjA5LDI3NCBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEyOjA5LDI3NCBbV29ya2VyLTEwNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjc1IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMjowOSwyNzcgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxODoxMjowOSwyODEgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxMjowOSwyODMgW1dvcmtlci0xMDY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjg0IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTg6MTI6MDksMjg2IFtXb3JrZXItMTA2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEyOjE2LDQxNCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzCisyMDIwLTA2LTE3IDE4OjEyOjE2LDQxNCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1Byb2plY3QtVGVzdHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMTg6MTI6NTgsOTkzIFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxODoxMjo1OCw5OTkgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjEyOjU5LDAwMSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE4OjEyOjU5LDAwMiBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTg6MTI6NTksMDA1IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTg6MTM6MDUsMzMzIFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEzOjA1LDMzNiBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjEzOjA1LDMzOSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIFRlc3RKc29uXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTM6MDUsMzM5IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyIG51bGwgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMzowNSwzNTkgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTM6MDUsMzYxIFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMTg6MTM6MDUsMzY1IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgVGVzdEpzb25dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciBudWxsIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAxODoxMzowNSwzNjUgW1dvcmtlci0xMDY6IExhdW5jaGluZyBUZXN0SnNvbl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgbnVsbCB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDE4OjE0OjE5LDExNyBbV29ya2VyLTEwNzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA2LTE3IDE4OjE3OjI3LDU4NSBbV29ya2VyLTEwMTogQnVpbGQgUHJvamVjdF0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE3IDE4OjE3OjI3LDU5MCBbV29ya2VyLTEwMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE4OjE3OjI3LDU5MyBbV29ya2VyLTEwMTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAxODoxNzoyNyw1OTQgW1dvcmtlci0xMDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxODoxNzoyNyw1OTYgW1dvcmtlci0xMDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTg6MTc6MzQsMzM3IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTcgMTg6MTc6MzQsMzM4IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAxODo1Njo0MSw0ODggW1dvcmtlci0xMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNyAxODo1Njo0MSw0ODggW1dvcmtlci0xMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDE5OjAwOjQzLDUxNSBbV29ya2VyLTExNjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xNyAxOTowMDo0Myw2MjkgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE3IDE5OjAwOjQzLDYzMyBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDMsNjM1IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQzLDYzNyBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDMsNjM5IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQzLDk0MSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBFUlJPUiBvLmUubS5jLmkuVVJMQ29ubmVjdGlvbkNhY2hlcyAtIFVuZXhwZWN0ZWQgVVJMQ29ubmVjdGlvbiBkZWZhdWx0VXNlQ2FjaGVzIGVuYWJsZWQKKzIwMjAtMDYtMTcgMTk6MDA6NDMsOTQ0IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxOTowMDo0Myw5NDYgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQzLDk0OCBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDMsOTUwIFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAxOTowMDo0NCwwNTEgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gRVJST1Igby5lLm0uYy5pLlVSTENvbm5lY3Rpb25DYWNoZXMgLSBVbmV4cGVjdGVkIFVSTENvbm5lY3Rpb24gZGVmYXVsdFVzZUNhY2hlcyBlbmFibGVkCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDA2OCBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMDg5IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMDkzIFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxOTowMDo0NCwwOTcgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAxOTowMDo0NCwwOTcgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDA5OCBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDIzOSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMzA5IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxOTowMDo0NCwzMTIgW1dvcmtlci0xMTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDMxNSBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjAwOjQ0LDMxNiBbV29ya2VyLTExMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MDA6NDQsMzE4IFtXb3JrZXItMTExOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTk6MTE6NTEsNDkwIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTcgMTk6MTE6NTEsNDkxIFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAxOToxMjoxNSw2NDggW1dvcmtlci0xMTU6IEJ1aWxkIFByb2plY3RdIEVSUk9SIG8uZS5tLmMuaS5VUkxDb25uZWN0aW9uQ2FjaGVzIC0gVW5leHBlY3RlZCBVUkxDb25uZWN0aW9uIGRlZmF1bHRVc2VDYWNoZXMgZW5hYmxlZAorMjAyMC0wNi0xNyAxOToxMjoxNSw2NTMgW1dvcmtlci0xMTU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAxOToxMjoxNSw2NTUgW1dvcmtlci0xMTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMTk6MTI6MTUsNjU2IFtXb3JrZXItMTE1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMTk6MTI6MTUsNjU4IFtXb3JrZXItMTE1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDE5OjEyOjI1LDEyMiBbV29ya2VyLTExNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDE5OjEyOjI1LDEyMiBbV29ya2VyLTExNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMjA6MDU6MTgsMTkxIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjAtMDYtMTcgMjA6MDU6NTgsMzEzIFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjA1OjU4LDMxNSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIwOjA2OjIwLDI0OCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDIwOjA2OjIwLDI0OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTcgMjA6MDY6MjAsMjUwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDIwOjA2OjIxLDM5MyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDowNjoyMSwzOTggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjA2OjIxLDQwMyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDowNjoyMSw0MDUgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjA2OjI4LDgxMCBbV29ya2VyLTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MDY6MjgsODEwIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIwOjEwOjU3LDQzNSBbV29ya2VyLTU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoxMDo1OCw0MDcgW1dvcmtlci01OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTA6NTgsNDA5IFtXb3JrZXItNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMDo1OCw0MTUgW1dvcmtlci01OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTA6NTgsNDE4IFtXb3JrZXItNTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxMyw4MjQgW1dvcmtlci04OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjExOjE0LDIxMSBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNCwyMjQgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE0LDIyNiBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNCwyNjQgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE0LDI2OCBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxMToxNCwyNjggW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjExOjE0LDMyMyBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNSwwMDMgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTUsMDE5IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE1LDAyMCBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNSwwMjMgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTE6MTUsNTMyIFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjExOjE1LDU0MCBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE1LDU0MiBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNSw1NDQgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoxMToxNiwxMTUgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTE6MTYsMTIxIFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjExOjE2LDEyMyBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxMToxNiwxMzEgW1dvcmtlci0xMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTE6MTYsMjAxIFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjExOjE2LDIwMyBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTE6MTYsMjA1IFtXb3JrZXItMTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjExOjE2LDIwNyBbV29ya2VyLTEzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTU6MzcsNDY1IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoxNTozNyw1MzggW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxNTozNyw2OTkgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxNTozNyw4NzEgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjE1OjM3LDg4NiBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE1OjM3LDg4OCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MTU6MzcsODk4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTU6MzcsODk5IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxNTozNyw4OTkgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxNTozNyw5MjggW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjE1OjM3LDk2MiBbV29ya2VyLTE0OiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTU6MzgsMDYyIFtXb3JrZXItMTQ6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxNzoyMCw0OTUgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTcgMjA6MTc6MjAsNTU3IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpMZW1tYVJlc3BvbnNlOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxNzoyMCw2MzggW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkxlbW1hUmVzcG9uc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjE3OjIwLDc2NSBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxNzoyMCw3NzggW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE3OjIwLDc4MCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxNzoyMCw3ODMgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE3OjIwLDc4MyBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoxNzoyMCw3ODMgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjE3OjIwLDc4OCBbV29ya2VyLTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxNzoyMCw4NzIgW1dvcmtlci0xMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkxlbW1hUmVzcG9uc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjE3OjIwLDk4NSBbV29ya2VyLTEzOiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6TGVtbWFSZXNwb25zZTpqYXI6c291cmNlczowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTk6MDUsMjg0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoxOTowNSwzNDcgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpKc29uVHJhdmVyc2U6amFyOjAuMS1TTkFQU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoxOTowNSw0OTUgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjE5OjA1LDU2OCBbV29ya2VyLTEzOiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MTk6MDUsNTc4IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MTk6MDUsNTgwIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoxOTowNSw2NjkgW1dvcmtlci0xMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjE5OjA1LDY3MiBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjE5OjA1LDY3MyBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MTk6MDUsNjc0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MTk6MDUsNjgwIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoyMDo1Nyw1MDYgW1dvcmtlci0xNTogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoyMDo1Nyw1NzYgW1dvcmtlci0xNTogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MjA6NTcsNjc0IFtXb3JrZXItMTU6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MjA6NTcsNzYzIFtXb3JrZXItMzogTG9hZGluZyBwb20ueG1sXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOkpzb25UcmF2ZXJzZTpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIwOjIwOjU3LDg0MiBbV29ya2VyLTE0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoyMDo1Nyw4NjYgW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjIwOjU3LDg2OCBbV29ya2VyLTE0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoyMDo1Nyw4OTEgW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjIwOjU3LDg5MiBbV29ya2VyLTE0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDoyMDo1Nyw4OTIgW1dvcmtlci0xNDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjIwOjU3LDg5NyBbV29ya2VyLTE0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoyMDo1Nyw5MDIgW1dvcmtlci0zOiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6SnNvblRyYXZlcnNlOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjA6MjI6NDQsMDQ2IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMDoyMjo0NCwxODEgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjIyOjQ0LDE4MSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjIyOjQ0LDk1MCBbV29ya2VyLTM6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL2pzb24vSnNvblRyYXZlcnNlLy9Kc29uVHJhdmVyc2UtLnBvbQorMjAyMC0wNi0xNyAyMDoyMjo0NCw5NTkgW1dvcmtlci0zOiBMb2FkaW5nIHBvbS54bWxdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOiBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xNyAyMDoyNDowNSwwOTggW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE3IDIwOjI0OjA1LDE0NiBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDIwOjI0OjA1LDMxMCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDIwOjI0OjA1LDM4MSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjQ6MDUsMzgzIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MDUsMzg0IFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDoyNDowNSwzODcgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoyNDowNSwzODcgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjI0OjA1LDM4OCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjI0OjA1LDM5NCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjQ6MDUsNDU2IFtXb3JrZXItMTM6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDoyNDozMyw1NTcgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE3IDIwOjI0OjMzLDYxMCBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE3IDIwOjI0OjMzLDc2NyBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6MjQ6MzMsODQ3IFtXb3JrZXItMTI6IExvYWRpbmcgcG9tLnhtbF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xNyAyMDoyNDozMyw4NzggW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDoyNDozMyw4ODMgW1dvcmtlci0xNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjI0OjMzLDkxMiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjI0OjMzLDkxMiBbV29ya2VyLTE0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MzMsOTEzIFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6MjQ6MzMsOTE4IFtXb3JrZXItMTQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDozNjozNSw2NTUgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjM2OjM1LDY1NSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAyMDozOToxMyw2NTEgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjM5OjEzLDY1NiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjM5OjEzLDY1NyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6Mzk6MTMsNjYxIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6Mzk6MjYsNTAwIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDozOToyNiw1MDAgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMjA6NDM6NDIsNDQ3IFtXb3JrZXItMTg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDo0Mzo0Miw0NjMgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo0Mzo0Miw0NjUgW1dvcmtlci0xODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjQzOjQyLDQ2OCBbV29ya2VyLTE4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjQzOjUyLDQ5NyBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6NDM6NTIsNDk3IFtXb3JrZXItMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIwOjQ2OjMzLDcyOSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NDY6MzMsNzMyIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjA6NDY6MzMsNzM3IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDo0NjozMyw3NDIgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo0NjozOSw3NTcgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIwOjQ2OjM5LDc1OCBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xNyAyMDo1MToxOSw3ODQgW1dvcmtlci0xOTogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDo1MToxOSw4MzAgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NTE6MTksODU2IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo1MToxOSw4NTggW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NTE6MTksODYwIFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo1MToxOSw4NjAgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6NTE6MTksODYxIFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMDo1MToxOSw4NzUgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NTE6MjAsMTEyIFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE3IDIwOjUxOjIwLDExNCBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xNyAyMDo1MToyMCwxMTYgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjA6NTE6MjAsMTE5IFtXb3JrZXItMjA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjUxOjIwLDEzMiBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDo1MToyMCwxMzQgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjUxOjIwLDEzNSBbV29ya2VyLTIwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMDo1MToyMCwxMzcgW1dvcmtlci0yMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE3IDIwOjUxOjM3LDc5MSBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTcgMjA6NTE6MzcsNzkyIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE3IDIxOjI5OjEwLDQwNiBbV29ya2VyLTI2OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjAtMDYtMTcgMjE6Mjk6NTIsNTc1IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xNyAyMToyOTo1Miw1NzUgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTcgMjE6NTM6NTcsMTg5IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xNyAyMTo1Mzo1NywyMzIgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcDpqc29uOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjE6NTM6NTcsMzAzIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXA6anNvbjpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE3IDIxOjUzOjU3LDM3MiBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjE6NTM6NTcsMzczIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTcgMjE6NTM6NTcsMzc1IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xNyAyMTo1Mzo1NywzNzYgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xNyAyMTo1Mzo1NywzNzcgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIxOjUzOjU3LDM3NyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE3IDIxOjUzOjU3LDM4MyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTcgMjE6NTM6NTcsNDMwIFtXb3JrZXItMjY6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcDpqc29uOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjE6NTM6NTcsNDczIFtXb3JrZXItMjY6IExvYWRpbmcgcG9tLnhtbF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcDpqc29uOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTcgMjE6NTM6NTgsNDEyIFtXb3JrZXItMTQ6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwOmpzb246MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXA6anNvbjpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDYtMTggMTQ6NTY6MTUsNzY1IFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDYtMTggMTQ6NTY6MzEsNDU1IFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDYtMTggMTQ6NTY6MzIsMjQ0IFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTggMTQ6NTY6MzIsNTMyIFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjMyLDY4MiBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIwLTA2LTE4IDE0OjU2OjMzLDA1OCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMC0wNi0xOCAxNDo1NjozMywwNzYgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6MzMsMDg3IFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6MzMsMDg4IFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1NjozMywwOTAgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjMzLDI1OCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNccG9tLnhtbC4KKzIwMjAtMDYtMTggMTQ6NTY6MzMsNDIyIFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHBvbS54bWwuCisyMDIwLTA2LTE4IDE0OjU2OjMzLDU3NCBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE4IDE0OjU2OjMzLDU4NyBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6MzMsNTg4IFtXb3JrZXItNTogVXBkYXRpbmcgTWF2ZW4gRGVwZW5kZW5jaWVzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjMzLDU4OSBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjM0LDcxNSBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0Miw0ODAgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjQyLDQ4MSBbV29ya2VyLTU6IFVwZGF0aW5nIE1hdmVuIERlcGVuZGVuY2llc10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0Miw0ODEgW1dvcmtlci01OiBVcGRhdGluZyBNYXZlbiBEZXBlbmRlbmNpZXNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0NCw5MTMgW1dvcmtlci0yOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0NCw5NTYgW1dvcmtlci0yOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ3LDE0OSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ3LDE1MSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDcsMTUzIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDcsMTU1IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0Nyw5NDcgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0Nyw5NTAgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0Nyw5NTcgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0Nyw5NTkgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0OCwxMTEgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OCwxMTMgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMTE2IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDgsMTE4IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ4LDExOSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ4LDEyMCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxNDo1Njo0OCwxNjEgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OCwzNDcgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OCwzNDkgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ4LDM1MSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ4LDM1MiBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksMTkwIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDksMTk2IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksMjE0IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDksMjE2IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNDAyIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0OSw0MDMgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNDAzIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNDEyIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTQ6NTY6NDksNDE0IFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDQyMCBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDQyNSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0OSw1NzEgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNTcyIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTQ6NTY6NDksNTcyIFtXb3JrZXItMTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxNDo1Njo0OSw1NzMgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDU4NSBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE0OjU2OjQ5LDU4NyBbV29ya2VyLTE6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxNDo1Njo0OSw1ODkgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxNDo1Njo0OSw1OTUgW1dvcmtlci0xOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTU6MDQ6NDAsODg4IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE1OjA0OjQwLDg4OSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDE5OjIxOjUzLDY3MSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlCisyMDIwLTA2LTE4IDE5OjIxOjUzLDY3MiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDE5OjI2OjIwLDU0MiBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6MjY6MjAsNTQzIFtXb3JrZXItMzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOToyNjoyMCw1NDUgW1dvcmtlci0zMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjI2OjIwLDU0OCBbV29ya2VyLTMyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6MjY6MjcsMTEyIFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOToyNjoyNywxMTMgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMTk6NDQ6MDUsNDY0IFtXb3JrZXItMzc6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NDQ6MDUsNTA3IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDUxOCBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDQ6MDUsNTIwIFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDUyMyBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDQ6MDUsNTIzIFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjQ0OjA1LDUyNCBbV29ya2VyLTMyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NDQ6MDUsNTU1IFtXb3JrZXItMzI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ0OjE3LDgxOSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NDQ6MTcsODE5IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDE5OjQ1OjQ4LDAyOCBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNi0xOCAxOTo0NTo0OCwxOTYgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE4IDE5OjQ1OjQ4LDI0MiBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTggMTk6NDU6NDgsMjUxIFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDU6NDgsMjUyIFtXb3JrZXItMzk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo0NTo0OCwzNjIgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE4IDE5OjQ1OjQ4LDM3MSBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo0NTo0OCwzNzIgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo0NTo0OSwwNDMgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ1OjQ5LDA0NSBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0NTo0OSwwNDcgW1dvcmtlci0zOTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ1OjQ5LDA0OCBbV29ya2VyLTM5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0NTo1MCwxMDkgW1dvcmtlci0zOTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczpVdGlsczpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE4IDE5OjQ1OjUwLDExOCBbV29ya2VyLTM5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjQ1OjUwLDExOSBbV29ya2VyLTM5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDU6NTAsMTQ4IFtXb3JrZXItMzk6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLnNlcnZpY2VzOlV0aWxzOmphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMC0wNi0xOCAxOTo0NjoxMCwyNDMgW1dvcmtlci0zODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDYtMTggMTk6NDY6MTAsMjQzIFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOTo0NzowNSwyODMgW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ3OjA1LDI4NSBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0NzowNSwyODcgW1dvcmtlci00MDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ3OjA1LDI4OCBbV29ya2VyLTQwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0Nzo1NSwzNTIgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNi0xOCAxOTo0Nzo1Nyw1NzMgW1dvcmtlci00OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDc6NTcsNTgyIFtXb3JrZXItNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NDg6NTUsMjE3IFtXb3JrZXItMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA2LTE4IDE5OjQ4OjU1LDIxOCBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDE5OjQ5OjA2LDg4MSBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNi0xOCAxOTo0OTowNyw3OTYgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ5OjA3LDgwMyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0OTowNyw4MDUgW1dvcmtlci0xMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ5OjA3LDgwNyBbV29ya2VyLTExOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo0OToyOSw1NDIgW1dvcmtlci0xMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDYtMTggMTk6NDk6MjksNTQyIFtXb3JrZXItMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOTo0OTo1MSwyODEgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NDk6NTEsMjg0IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NDk6NTEsMjg2IFtXb3JrZXItMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjQ5OjUxLDI4OCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjQ5OjUxLDQwMSBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0OTo1MSw0MTUgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjQ5OjUxLDQxOCBbV29ya2VyLTA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo0OTo1MSw0MjEgW1dvcmtlci0wOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjQ5OjU5LDg0NiBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NDk6NTksODQ3IFtXb3JrZXItMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAxOTo1MDoxMSw1MjUgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTA6MTEsNTI4IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo1MDoxMSw1MjkgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTA6MTEsNTMxIFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAxOTo1MDoxMSw1MzMgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTA6MTEsNTM0IFtXb3JrZXItMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1MDoxMSw1NjAgW1dvcmtlci0zOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTA6MjUsMjQ5IFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjUwOjI1LDI1MCBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDE5OjUzOjEzLDM2OSBbV29ya2VyLTg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTM6MTMsMzY5IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOCAxOTo1MzoyMCw0MTQgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUzOjIwLDQxNSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjUzOjIwLDQxNyBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTM6MjAsNDE5IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTY1IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTY1IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1MzoyMCw1NzIgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUzOjIwLDU3NyBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjUzOjIwLDU4MSBbV29ya2VyLTEzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTgzIFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NTM6MjAsNTg0IFtXb3JrZXItMTM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1MzoyMCw1ODQgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1MzoyMCw1OTMgW1dvcmtlci0xMzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDE5OjUzOjI2LDMzNiBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1MzoyNiwzMzYgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOCAxOTo1NTo1OCwyMDggW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAxOTo1NTo1OCwyOTggW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjU1OjU4LDI5OSBbV29ya2VyLTEzOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OCwzMDAgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OCw0ODIgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjU1OjU4LDQ4MyBbV29ya2VyLTEzOiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OCw0ODMgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OCw4MTQgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwMTEgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDE5OjU1OjU5LDAxMiBbV29ya2VyLTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwMTIgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwMTggW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo1NTo1OSwwNTIgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMTk6NTU6NTksMDU3IFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMTk6NTU6NTksMDg1IFtXb3JrZXItNTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDE5OjU1OjU5LDA4NSBbV29ya2VyLTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDE5OjU1OjU5LDA4NSBbV29ya2VyLTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAxOTo1NTo1OSwwOTkgW1dvcmtlci01OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAxOTo1NjoyMywwMDkgW1dvcmtlci04OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMTk6NTY6MjMsMDA5IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMjA6MDY6NDAsNTc3IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjA2OjQwLDU3OSBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MDY6NDAsNTgxIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjA2OjQwLDU4MyBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MDY6NDYsMjUwIFtXb3JrZXItNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjA2OjQ2LDI1MCBbV29ya2VyLTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIwOjIwOjM2LDMxNCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAyMDoyMDozNiwzOTggW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDoyMDozNiw0MDAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIwOjIwOjM2LDQwMCBbV29ya2VyLTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDoyMDozNiw2NDQgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjQ2IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyMDozNiw2NDcgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjQ5IFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyMDozNiw2NTAgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjA6MzYsNjUwIFtXb3JrZXItNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDoyMDozNiw2NjMgW1dvcmtlci03OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjI6MDEsMzQ1IFtXb3JrZXItMjE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDoyMjowMSwzNDYgW1dvcmtlci0yMTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjI6MDEsMzQ2IFtXb3JrZXItMjE6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsNTMxIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAyMDoyMjowOCw2NDEgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsNjQzIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsNjQ0IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDoyMjowOCw5MzAgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjIyOjA4LDkzNCBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjIyOjA4LDkzNiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjI6MDgsOTM4IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjI6MDgsOTM5IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDoyMjowOCw5MzkgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDoyMjowOCw5NDYgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjIyOjM0LDI4NCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjIyOjM0LDI4NCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIwOjIyOjQ0LDI0NyBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjI6NDQsMjQ3IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIwOjI1OjM3LDE4MSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xOCAyMDoyNTozNywxODIgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIwOjI1OjQ2LDI5NyBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjU6NDYsMzAyIFtXb3JrZXItMjE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyNTo0NiwzMDQgW1dvcmtlci0yMTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjI1OjQ2LDMwNiBbV29ya2VyLTIxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjU6NTIsNTk0IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTggMjA6MjU6NTIsNTk0IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMjA6MjY6NDcsNTYxIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjY6NDcsNTYxIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTggMjA6MjY6NTQsMTU5IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMDoyNjo1NCwxNjEgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjI2OjU0LDE2MiBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjY6NTQsMTY0IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMDoyNjo1NCwyMzggW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjM5IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjQwIFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDoyNjo1NCwyNDUgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjI2OjU0LDI0OSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIwOjI2OjU0LDI1MSBbV29ya2VyLTIyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjU0IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjA6MjY6NTQsMjU0IFtXb3JrZXItMjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2Ygd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDoyNjo1NCwyNTQgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMDoyNjo1NCwyNjAgW1dvcmtlci0yMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIwOjI2OjU5LDMyNiBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6MjY6NTksMzI2IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIwOjI4OjM2LDY3NCBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE4IDIwOjQ0OjQ3LDI3MiBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjQ0OjQ3LDI3MiBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIwOjQ2OjE0LDk5MyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjQ2OjE0LDk5MyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIwOjQ2OjUwLDk0NyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIwOjQ2OjUwLDk0OCBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIwOjQ3OjMwLDk0MyBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjA6NDc6MzAsOTQzIFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIwOjUzOjI3LDg4MiBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA2LTE4IDIwOjUzOjMwLDI2NSBbV29ya2VyLTM6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDo1MzozMCwyNjYgW1dvcmtlci0zOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMDo1MzozMCwyNjcgW1dvcmtlci0zOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU3LDgwMyBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU3LDgwNCBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjc6NTcsODYyIFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjI3OjU4LDE1NyBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjc6NTgsMTU4IFtXb3JrZXItMTc6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU4LDE1OSBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU5LDAzMSBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAyMjoyNzo1OSwxMTggW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OSwxMTkgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU5LDExOSBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OSwzOTcgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyNzo1OSw0MDEgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI3OjU5LDQwMiBbV29ya2VyLTE3OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyODowMCw1MjcgW1dvcmtlci0xNzogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDEsNDkzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAxLDQ5NiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAxLDQ5OSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMSw1MDIgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMSw5MDEgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDEsOTI2IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAxLDkyOCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMSw5MzAgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjAyIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjAzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyODowMiwyMTcgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjI0IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMiwyMjYgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjM2IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMiwyMzcgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMjM4IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjoyODowMiwyNjEgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDIsMzUzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDM3OCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDM4MCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMiwzODUgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjoyODowMiw1MTcgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNTYyIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDU2NCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMiw1NzAgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNzYwIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNzYxIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjoyODowMiw3NjIgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNzgwIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDc5NiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsNzk5IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAyLDgyMCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsODIxIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAyLDgyMSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDIsODI3IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjI4OjAzLDAxNCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6Mjg6MDMsMDE0IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI4OjAzLDAxNiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjI4OjAzLDAyNSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMywwMjcgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjAzLDAzMCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjoyODowMywwMzMgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjI4OjEyLDgwNCBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNi0xOCAyMjoyODoxMiw4MDUgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjMxOjM0LDMzNSBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNi0xOCAyMjozMTozNCwzMzUgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjQxOjQ5LDQ5NyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjAtMDYtMTggMjI6NDE6NDksNTM0IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NDksNjYzIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnRlc3RzOjAuMSBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjAtMDYtMTggMjI6NDE6NDksNjkzIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NDksNjk0IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0MTo0OSw2OTUgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NDksODI1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOCAyMjo0MTo0OSw4MzMgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NDksODM0IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NDE6NDksODM1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0MTo1MCwxMzIgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQxOjUwLDEzNCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0MTo1MCwxMzYgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQxOjUwLDEzOCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0MTo1MSwxNzMgW1dvcmtlci0yMzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0MTo1MSwxNzQgW1dvcmtlci0yMzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQxOjUxLDE3NSBbV29ya2VyLTIzOiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0MTo1MSwxOTggW1dvcmtlci0yMzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXM6VXRpbHM6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6VXRpbHM6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA2LTE4IDIyOjQyOjA0LDE3MiBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnQKKzIwMjAtMDYtMTggMjI6NDI6MDQsMTcyIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIyOjQyOjEwLDQzNCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQyOjEwLDQzOSBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDI6MTAsNDQyIFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQyOjEwLDQ0MyBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDI6MTAsNDQ2IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQyOjI0LDMwMSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNi0xOCAyMjo0MjoyNCwzMDIgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjQ0OjE5LDE3MCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ0OjE5LDE3MSBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDIyNSBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMjI4IFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDIzMCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMjMyIFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDMxOCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzMTkgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzMjAgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDMyOCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMzMxIFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDQ6MjgsMzMzIFtXb3JrZXItMjM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0NDoyOCwzMzUgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0NDoyOCwzMzcgW1dvcmtlci0yMzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDMzNyBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ0OjI4LDM1MCBbV29ya2VyLTIzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDQ6MzQsNDIyIFtXb3JrZXItMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0xOCAyMjo0NDozNCw0MjIgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMjI6NDU6NTIsNjg3IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6NDU6NTIsNjg3IFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTggMjI6NDY6MDQsNzAzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDcxMiBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDY6MDQsNzEzIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDcyNCBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDY6MDQsNzI1IFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDcyNSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6NDY6MDQsNzMwIFtXb3JrZXItMjM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDgyOSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0NjowNCw4NzkgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjA0LDg4MSBbV29ya2VyLTIzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo0NjowNCw4ODMgW1dvcmtlci0yMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjQ2OjE0LDU0NyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6NDY6MTQsNTQ4IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjQ5OjM2LDI0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZQorMjAyMC0wNi0xOCAyMjo0OTozNiwyNDUgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIyOjQ5OjQ2LDEwOCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NDk6NDYsMTEwIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo0OTo0NiwxMTIgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjQ5OjQ2LDEyMSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NDk6NTQsNDEyIFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2UKKzIwMjAtMDYtMTggMjI6NDk6NTQsNDEyIFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTggMjI6NTA6NDUsMTY5IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTggMjI6NTA6NDUsMTcwIFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOCAyMjo1MDo0NSwxNzYgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTA6NDUsMTc4IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1MDo0NSwxODAgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTA6NDUsMTgyIFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1MDo0NSwyNzQgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTA6NDUsMjc2IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTA6NDUsMjc5IFtXb3JrZXItMzA6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDI4MSBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDQ5OCBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1MDo0NSw0OTkgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjUwOjQ1LDUwMSBbV29ya2VyLTMwOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1MDo0NSw1MDMgW1dvcmtlci0zMDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjUwOjUyLDU3MCBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudAorMjAyMC0wNi0xOCAyMjo1MDo1Miw1NzAgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE4IDIyOjU0OjExLDUzNCBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjU0OjExLDUzNCBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE4IDIyOjU0OjE3LDQ5OSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTAxIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1NDoxNyw1MDMgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjU0OjE3LDUwNCBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTI2IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1NDoxNyw1MjggW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTMxIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1NDoxNyw1MzQgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTU3IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1NDoxNyw1NTggW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOCAyMjo1NDoxNyw1NjAgW1dvcmtlci0yODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE4IDIyOjU0OjE3LDU2MSBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE4IDIyOjU0OjE3LDU2MiBbV29ya2VyLTI4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTYyIFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTggMjI6NTQ6MTcsNTY4IFtXb3JrZXItMjg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOCAyMjo1NDozMCw3NDUgW1dvcmtlci0zMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE4IDIyOjU0OjMwLDc0NSBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAwODo0Njo0NiwzMzUgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwODo0Njo0NiwzMzYgW1dvcmtlci0zNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAwODo0Nzo0NSw3MjcgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDg6NDc6NDUsNzMwIFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAwODo0Nzo0NSw3MzEgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDg6NDc6NDUsNzMzIFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAwODo0Nzo0NSw3MzQgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NDc6NDUsNzM0IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwODo0Nzo0NSw4NDAgW1dvcmtlci0zNzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDg6NDc6NDUsOTI1IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDkyNiBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NDc6NDUsOTI3IFtXb3JrZXItMzc6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjQ3OjQ1LDkyOSBbV29ya2VyLTM3OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NDc6NTUsMjU4IFtXb3JrZXItMzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwODo0Nzo1NSwyNTggW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDg6NTM6MDMsNjc1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NTM6MDMsNjc1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMDg6NTM6MTMsMDIzIFtXb3JrZXItNDQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjUzOjEzLDAyNSBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NTM6MTMsMDI2IFtXb3JrZXItNDQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjUzOjEzLDAyOSBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NTM6MTMsMTgyIFtXb3JrZXItNDQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjUzOjEzLDE4OSBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NTM6MTMsMTkyIFtXb3JrZXItNDQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjUzOjEzLDIwNyBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NTM6MTMsMjA4IFtXb3JrZXItNDQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIwLTA2LTE5IDA4OjUzOjEzLDIwOCBbV29ya2VyLTQ0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NTM6MTMsMjE4IFtXb3JrZXItNDQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA4OjUzOjI3LDUyOCBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMTkgMDg6NTM6MjcsNTI4IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDA4OjUzOjM0LDY1MCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDg6NTM6MzQsNjUyIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDg6NTM6MzQsNjU0IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAwODo1MzozNCw2NTYgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAwODo1Mzo0MCwwODcgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTE5IDA4OjUzOjQwLDA4NyBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAwOTowNTozMyw1MjMgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOTowNTozMyw1MjMgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAwOTowNTo0MSwzNjMgW1dvcmtlci00MzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzY1IFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAwOTowNTo0MSwzNjcgW1dvcmtlci00MzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzcyIFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAwOTowNTo0MSwzNzIgW1dvcmtlci00MzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MDU6NDEsMzcyIFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOTowNTo0MSwzNzkgW1dvcmtlci00MzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDk6MDU6NDEsNDczIFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjA1OjQxLDQ3NSBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDk6MDU6NDEsNDc3IFtXb3JrZXItNDM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjA1OjQxLDQ3OCBbV29ya2VyLTQzOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDk6MDU6NTcsMDg2IFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOTowNTo1NywwODcgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMDk6MDk6MjksMjE3IFtXb3JrZXItNDM6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNi0xOSAwOToxMToyMyw2ODUgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjExOjIzLDY4NiBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAwOToxMzo1NSwwNzQgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHMKKzIwMjAtMDYtMTkgMDk6MTM6NTUsMDc0IFtXb3JrZXItNTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAwOToxNDowNiw1NzYgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjE0OjA2LDU3NiBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAwOToyMjo1Miw4OTUgW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDYtMTkgMDk6MjI6NTMsNjUzIFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAwOToyMjo1Myw3NzIgW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjI6NTMsNzczIFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjI6NTQsMDA3IFtXb3JrZXItMzQ6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjIyOjU0LDAwOCBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjIyOjU0LDU2MCBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYworMjAyMC0wNi0xOSAwOToyMjo1NCw1NjAgW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL0dsZW1tU2VydmljZXMvc3JjCisyMDIwLTA2LTE5IDA5OjIyOjU0LDkwNiBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBFUlJPUiBvLmUubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yIC0gVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCitvcmcuZWNsaXBzZS5tMmUud3RwLk1hcmtlZEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbmZpZ3VyZSBHbGVtbVNlcnZpY2VzCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XVFBQcm9qZWN0Q29uZmlndXJhdG9yLmNvbmZpZ3VyZShXVFBQcm9qZWN0Q29uZmlndXJhdG9yLmphdmE6NjgpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUucHJvamVjdC5jb25maWd1cmF0b3IuQWJzdHJhY3RMaWZlY3ljbGVNYXBwaW5nLmNvbmZpZ3VyZShBYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuamF2YToxMjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTA4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMy5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24oUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NTAxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIudXBkYXRlUHJvamVjdENvbmZpZ3VyYXRpb24wKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjQzOSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDIuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQyLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTozNDkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC5VcGRhdGVNYXZlblByb2plY3RKb2IucnVuSW5Xb3Jrc3BhY2UoVXBkYXRlTWF2ZW5Qcm9qZWN0Sm9iLmphdmE6NzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZS51aV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5JbnRlcm5hbFdvcmtzcGFjZUpvYi5ydW4oSW50ZXJuYWxXb3Jrc3BhY2VKb2IuamF2YTozOSkgW29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IE9uZSBvciBtb3JlIGNvbnN0cmFpbnRzIGhhdmUgbm90IGJlZW4gc2F0aXNmaWVkLgorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1vZGlmeUludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MzYzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0Lm1lcmdlQ2hhbmdlc0ludGVybmFsKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTE4MSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5hY2Nlc3MkMihGYWNldGVkUHJvamVjdC5qYXZhOjExMTcpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QkMS5ydW4oRmFjZXRlZFByb2plY3QuamF2YTozMjQpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMjg5KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5yZXNvdXJjZXMuV29ya3NwYWNlLnJ1bihXb3Jrc3BhY2UuamF2YToyMzE2KSB+W29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzXzMuMTMuMC52MjAxODA1MTItMTEzOC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5KEZhY2V0ZWRQcm9qZWN0LmphdmE6MzM5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS53dHAuV2ViUHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZShXZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YToxMzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5BYnN0cmFjdFByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5jb25maWd1cmVQcm9qZWN0KEFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmphdmE6OTUpIH5bbmE6bmFdCisJLi4uIDE4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMC0wNi0xOSAwOToyMjo1NSwxNDggW1dvcmtlci0zNDogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjIyOjU1LDE1NyBbV29ya2VyLTM0OiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBVcGRhdGUgY29tcGxldGVkOiAyIHNlYworMjAyMC0wNi0xOSAwOToyNTozOCw5MzYgW1dvcmtlci00NjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDA5OjI1OjM4LDkzNyBbV29ya2VyLTQ2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAwOToyNTo1NCwyODcgW1dvcmtlci01MjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gVXBkYXRlIHN0YXJ0ZWQKKzIwMjAtMDYtMTkgMDk6MjU6NTQsMzk4IFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAwOToyNTo1NCw0NTQgW1dvcmtlci01MjogVXBkYXRpbmcgTWF2ZW4gUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjU6NTQsNDU1IFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMDk6MjU6NTQsNjYzIFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tU2VydmljZXMvc3JjCisyMDIwLTA2LTE5IDA5OjI1OjU0LDY2MyBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1TZXJ2aWNlcy9zcmMvdGVzdC9qYXZhIGJlY2F1c2UgaXQgb3ZlcmxhcHMgd2l0aCAvR2xlbW1TZXJ2aWNlcy9zcmMKKzIwMjAtMDYtMTkgMDk6MjU6NTQsNzk1IFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIEVSUk9SIG8uZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IgLSBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMKK29yZy5lY2xpcHNlLm0yZS53dHAuTWFya2VkRXhjZXB0aW9uOiBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5OSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IuY29uZmlndXJlKFdUUFByb2plY3RDb25maWd1cmF0b3IuamF2YTo2OCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5wcm9qZWN0LmNvbmZpZ3VyYXRvci5BYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuY29uZmlndXJlKEFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5qYXZhOjEyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDgpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbjAoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6NDM5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIkMi5jYWxsKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjM1MikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDIuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLnVwZGF0ZVByb2plY3RDb25maWd1cmF0aW9uKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjM0OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLnVpLmludGVybmFsLlVwZGF0ZU1hdmVuUHJvamVjdEpvYi5ydW5JbldvcmtzcGFjZShVcGRhdGVNYXZlblByb2plY3RKb2IuamF2YTo3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KSBbb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogT25lIG9yIG1vcmUgY29uc3RyYWludHMgaGF2ZSBub3QgYmVlbiBzYXRpc2ZpZWQuCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5SW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YTozNjMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubWVyZ2VDaGFuZ2VzSW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YToxMTgxKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0LmFjY2VzcyQyKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTExNykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdCQxLnJ1bihGYWNldGVkUHJvamVjdC5qYXZhOjMyNCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnkoRmFjZXRlZFByb2plY3QuamF2YTozMzkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlKFdlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjEzNikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5NSkgfltuYTpuYV0KKwkuLi4gMTggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA2LTE5IDA5OjI1OjU0LDkyNyBbV29ya2VyLTUyOiBVcGRhdGluZyBNYXZlbiBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MjU6NTQsOTMyIFtXb3JrZXItNTI6IFVwZGF0aW5nIE1hdmVuIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIFVwZGF0ZSBjb21wbGV0ZWQ6IDAgc2VjCisyMDIwLTA2LTE5IDA5OjI2OjExLDUyNSBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDA5OjI2OjExLDUyNiBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDA5OjI2OjE4LDI2MCBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDk6MjY6MTgsMjYyIFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA5OjI2OjE4LDI2NCBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDk6MjY6MTgsMjY2IFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA5OjI2OjE4LDUyNSBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAwOToyNjoxOCw1MjYgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAwOToyNjoxOCw1MzQgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjI2OjE4LDU0MyBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDA5OjI2OjE4LDU0NCBbV29ya2VyLTM0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMDk6MjY6MTgsNTQ2IFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMDk6MjY6MTgsNTQ3IFtXb3JrZXItMzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOToyNjoxOCw1NDcgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAwOToyNjoxOCw1NjMgW1dvcmtlci0zNDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDA5OjI2OjI3LDQwNCBbV29ya2VyLTU1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMDk6MjY6MjcsNDA0IFtXb3JrZXItNTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDExOjUzOjE3LDQzNSBbbWFpbl0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDEyOjAwOjE2LDA0NyBbV29ya2VyLTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDEyOjAwOjE2LDA0NyBbV29ya2VyLTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDEyOjAwOjIxLDg1NSBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDA6MjEsODU3IFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDA6MjEsODU4IFtXb3JrZXItODk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowMDoyMSw4NTkgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowMDoyMSw4NjAgW1dvcmtlci04OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDEyOjAwOjIxLDg2MCBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDEyOjAwOjIxLDg2OSBbV29ya2VyLTg5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDA6MzEsOTgxIFtXb3JrZXItODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxMjowMDozMSw5ODIgW1dvcmtlci04OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTI6MDQ6NDksMjQ3IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjAtMDYtMTkgMTI6MDQ6NTEsMDE5IFtXb3JrZXItMDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDEyOjA0OjUxLDAyOSBbV29ya2VyLTA6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDEyOjA0OjUxLDAyOSBbV29ya2VyLTA6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTI6MDg6NDUsNDI4IFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTI6MDg6NDUsNDI5IFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTI6MDk6MDYsMTMyIFtXb3JrZXItMTM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowOTowNiwxMzMgW1dvcmtlci0xMzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDcsNjQ0IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDcsNjQ3IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDEyOjA5OjA3LDY1MSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA3LDY1MyBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowNyw2NTYgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxMjowOTowNyw2NTcgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDcsNjkxIFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDgsOTYxIFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDEyOjA5OjA4LDk4OSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA4LDk5MSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDgsOTkzIFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDgsOTk1IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowOSw1MTIgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowOSw1MTQgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowOSw1MTcgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowOSw1MTkgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowOSw2ODQgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowOSw2ODYgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MDksNjg5IFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTI6MDk6MDksNjkxIFtXb3JrZXItMzogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDEyOjA5OjA5LDg5NyBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowOTowOSw4OTggW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxMjowOTowOSw5MDAgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDEyOjA5OjA5LDkwOCBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDEyOjA5OjA5LDkxMSBbV29ya2VyLTM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxMjowOTowOSw5MTQgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxMjowOTowOSw5MTYgW1dvcmtlci0zOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTI6MDk6MzAsMzQyIFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxMjowOTozMCwzNDIgW1dvcmtlci0xMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTg6MTc6NTYsMzI4IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODoxNzo1NiwzMzAgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTg6MjA6MDgsNTY0IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMDowOCw1ODAgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMDowOCw1OTEgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIwOjA4LDYxNSBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIwOjA4LDY1MCBbV29ya2VyLTQxOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjA6MDgsNjUzIFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjA6MDgsNjU1IFtXb3JrZXItNDE6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMDowOCw2NTcgW1dvcmtlci00MTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMjozNyw4OTggW1dvcmtlci00NDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxODoyMjozNyw5OTEgW1dvcmtlci00NDogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzgsNTExIFtXb3JrZXItNDQ6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDEyNyBbV29ya2VyLTQ0OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU0MCBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzksNTY2IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU4MSBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzksNTgzIFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU4OSBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzksNTg5IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDU4OSBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzksNTk3IFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIyOjM5LDg1MiBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MjI6MzksODYxIFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIyOjM5LDg2MyBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDg2NCBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMjozOSw4NjYgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMjozOSw5NzggW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjI6MzksOTgwIFtXb3JrZXItMzk6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIyOjM5LDk4MiBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMjozOSw5ODQgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjI6NTcsMjQ5IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjI6NTcsMjUwIFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTg6MjM6MDcsOTgwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMzowNyw5ODEgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyMzowNyw5ODMgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjIzOjA3LDk4OCBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjIzOjA3LDk4OSBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjM6MDcsOTg5IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjM6MDcsOTkzIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyMzoxNCw2MjYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjIzOjE0LDYyNiBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxODoyNTozNSwzMTUgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjI1OjM1LDMxNyBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjI1OjM1LDMyMCBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MjU6MzUsMzIxIFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MjY6MzksNDY1IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjY6MzksNDY1IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTg6MjY6NTAsMDU2IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxODoyNjo1MCwxMDkgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy51dGlsczp1dGlsczpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE5IDE4OjI2OjUwLDExNSBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjI2OjUwLDIzMiBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzLnV0aWxzOnV0aWxzOmphcjowLjEtU05BUFNIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTkgMTg6MjY6NTAsMjM1IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MjY6NTAsNTYzIFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyNjo1MCw1NjUgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxODoyNjo1MCw1NjYgW1dvcmtlci00NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjI2OjUwLDU2NyBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjI2OjUwLDU2OCBbV29ya2VyLTQ0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjY6NTAsNTY4IFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MjY6NTAsNTcxIFtXb3JrZXItNDQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyNjo1MSw2MDIgW1dvcmtlci0zOTogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy51dGlsczp1dGlsczpqYXI6MC4xLVNOQVBTSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE5IDE4OjI2OjUxLDYwOCBbV29ya2VyLTM5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjI2OjUxLDc4OSBbV29ya2VyLTM5OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy51dGlsczp1dGlsczowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlcy51dGlsczp1dGlsczpqYXI6c291cmNlczowLjEtU05BUFNIT1QKKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjc3NikgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwkNS5jYWxsKE1hdmVuSW1wbC5qYXZhOjEpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjExMikgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzQzKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLnJlc29sdmUoTWF2ZW5JbXBsLmphdmE6NzIwKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWQoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6Mjc5KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZEF0dGFjaG1lbnRzKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI1NCkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRNYXZlbihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyMjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxNjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzcpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iJDEuY2FsbChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTUxKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwuZXhlY3V0ZShNYXZlbkltcGwuamF2YToxMzU1KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KKzIwMjAtMDYtMTkgMTg6Mjk6MjYsMTE0IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlscworMjAyMC0wNi0xOSAxODoyOToyNiwxMTQgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTg6Mjk6MzQsMTE3IFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyOTozNCwxMjEgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6Mjk6MzQsMTIyIFtXb3JrZXItNDc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODoyOTozNCwxMjQgW1dvcmtlci00NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6Mjk6NDIsNTQyIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzCisyMDIwLTA2LTE5IDE4OjI5OjQyLDU0MyBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTg6MzA6MzAsMjQxIFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzAsMjQxIFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTg6MzA6MzYsMjE4IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozMDozNiwyMjEgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzYsMjIyIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozMDozNiwyMjQgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzYsODQyIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxODozMDozNiw4OTEgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozMDozNiw4OTEgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzYsOTg4IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzYsOTg5IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjMwOjM3LDMxMyBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzA6MzcsMzE1IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MzA6MzcsMzE3IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozMDozNywzMTggW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODozMDozNywzMTkgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjMwOjM3LDMxOSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjMwOjM3LDMyNCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzE6MDMsNzc1IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6MzE6MDMsNzc1IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjMxOjAzLDc4MSBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6MzE6MDMsNzgzIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6MzE6MDMsNzg0IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozMTowMyw3ODUgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxODozMToxMywwMjYgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjMxOjEzLDAyNiBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxODozODoyNCwxOTIgW1dvcmtlci00MzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxODozODoyNCwyMzggW1dvcmtlci00MzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsMjM4IFtXb3JrZXItNDM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozODoyNCw0MjUgW1dvcmtlci00MzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTg6Mzg6MjQsNDI1IFtXb3JrZXItNDM6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxODozODoyNCw2MTUgW1dvcmtlci00MzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozODoyNCw5MjEgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDkyMiBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDkzMCBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozODoyNCw5MzMgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDkzNSBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozODoyNCw5MzYgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDkzNyBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozODoyNCw5MzcgW1dvcmtlci0zOTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjM4OjI0LDk0MiBbV29ya2VyLTM5OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxODozODozNSwxMDIgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE4OjM4OjM1LDEwMiBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxODozOTowNCwwNzYgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozOTowNCwwNzYgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxODozOToxMSw5NzQgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjM5OjExLDk3NiBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE4OjM5OjExLDk3NyBbV29ya2VyLTQzOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTg6Mzk6MTEsOTc5IFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTg6Mzk6MTEsOTgwIFtXb3JrZXItNDM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozOToxMSw5ODAgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxODozOToxMSw5ODMgW1dvcmtlci00MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE4OjM5OjE4LDUyNCBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTg6Mzk6MTgsNTI1IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjAzOjU1LDg2MSBbV29ya2VyLTUyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxOTowMzo1NiwxNTkgW1dvcmtlci01MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjAzOjU2LDE2MSBbV29ya2VyLTUyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTowMzo1NiwxNjIgW1dvcmtlci01MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjAzOjU2LDE2NCBbV29ya2VyLTUyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTowNzowMCw0OTEgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTowNzowMCw0OTEgW1dvcmtlci01NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxOTowNzowNywyOTggW1dvcmtlci00ODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMC0wNi0xOSAxOTowNzowNyw2MjQgW1dvcmtlci00ODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTowNzowOCw1MTkgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2VccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6MDc6MDksMTE2IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjA3OjA5LDExOCBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTowNzowOSwxMjAgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MDc6MDksMTIyIFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjA3OjA5LDI5NiBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjA3OjA5LDM2MiBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTowNzowOSwzNjQgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTowNzowOSwzNjUgW1dvcmtlci01NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MDc6MDksMzY3IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDksNTgyIFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU4NSBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDksNTg5IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU5MSBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDksNTkxIFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjA3OjA5LDU5MSBbV29ya2VyLTU1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MDc6MDksNTk5IFtXb3JrZXItNTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjExOjI5LDI0OSBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MTE6MjksMjUwIFtXb3JrZXItNTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjE3OjU5LDAzMiBbV29ya2VyLTU5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MTc6NTksMDQ4IFtXb3JrZXItNTk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6MTc6NTksMDQ5IFtXb3JrZXItNTk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOToxNzo1OSwwNTEgW1dvcmtlci01OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOToxODowNyw5NDkgW1dvcmtlci01MjogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOToxODowOCwxNjkgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMTcwIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOToxODowOCwxOTIgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMTk0IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOToxODowOCwxOTUgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MTg6MDgsMTk1IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOToxODowOCwyMDggW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MTg6MjEsMzE1IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MTg6MjEsMzE1IFtXb3JrZXItNTg6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMTk6MTg6MjksMjk5IFtXb3JrZXItNTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOToxODoyOSwyOTkgW1dvcmtlci01NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMTk6MjA6MjMsMDAzIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOToyMDoyMywwMDUgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOToyMDoyMywwMDYgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjIwOjIzLDAwOCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjIwOjIzLDAwOCBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MjA6MjMsMDA4IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MjA6MjMsMDEyIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOToyMDozMSw3NTcgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjIwOjMxLDc1NyBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOToyMToyMiw4NjkgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjIxOjIyLDg2OSBbV29ya2VyLTUyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAxOTozMTowNCw4MTYgW1dvcmtlci01NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozMTowNCw4MTcgW1dvcmtlci01NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBjbGVhbiBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBjbGVhbgorMjAyMC0wNi0xOSAxOTozMToxNywxNDkgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjMxOjE3LDg1NSBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvdXRpbHMvMC4xLVNOQU9TSE9UL3V0aWxzLTAuMS1TTkFPU0hPVC5wb20KKzIwMjAtMDYtMTkgMTk6MzE6MTcsODc4IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVGhlIFBPTSBmb3IgZGUua29yYXAuc2VydmljZXM6dXRpbHM6amFyOjAuMS1TTkFPU0hPVCBpcyBtaXNzaW5nLCBubyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorMjAyMC0wNi0xOSAxOTozMToxOCwwNDYgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmUuQWJzdHJhY3RUcmFuc2Zlckxpc3RlbmVyQWRhcHRlciAtIERvd25sb2FkZWQgaHR0cHM6Ly9yZXBvLm1hdmVuLmFwYWNoZS5vcmcvbWF2ZW4yL2RlL2tvcmFwL3NlcnZpY2VzL3V0aWxzLzAuMS1TTkFPU0hPVC91dGlscy0wLjEtU05BT1NIT1QuamFyCisyMDIwLTA2LTE5IDE5OjMxOjE4LDEwMiBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFRoZSBQT00gZm9yIGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOmphcjowLjEtU05BT1NIT1QgaXMgbWlzc2luZywgbm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKzIwMjAtMDYtMTkgMTk6MzE6MTgsNDQ5IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozMToxOCw0NTAgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozMToxOCw0NTEgW1dvcmtlci01NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjMxOjE4LDQ1MyBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjMxOjE4LDQ1MyBbV29ya2VyLTU2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzE6MTgsNDUzIFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzE6MTgsNDU2IFtXb3JrZXItNTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozMToxOSw0NDAgW1dvcmtlci01NjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBUaGUgUE9NIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczpqYXI6MC4xLVNOQU9TSE9UIGlzIG1pc3NpbmcsIG5vIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYXZhaWxhYmxlCisyMDIwLTA2LTE5IDE5OjMxOjE5LDc3OCBbV29ya2VyLTU2OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkuZS5BYnN0cmFjdFRyYW5zZmVyTGlzdGVuZXJBZGFwdGVyIC0gRG93bmxvYWRlZCBodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvZGUva29yYXAvc2VydmljZXMvdXRpbHMvMC4xLVNOQU9TSE9UL3V0aWxzLTAuMS1TTkFPU0hPVC1zb3VyY2VzLmphcgorMjAyMC0wNi0xOSAxOTozMToxOSw4MDAgW1dvcmtlci01NjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQU9TSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6dXRpbHM6amFyOnNvdXJjZXM6MC4xLVNOQU9TSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIwLTA2LTE5IDE5OjM0OjAzLDE2MCBbV29ya2VyLTU4OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDE5OjM0OjAzLDIwMCBbV29ya2VyLTU4OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsMjU1IFtXb3JrZXItNTg6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozNDowMywzNDQgW1dvcmtlci01ODogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozNDowMyw3NDAgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozNDowMyw3NDYgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzU1IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNDowMyw3NTcgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzYyIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNDowMyw3NjIgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsNzYyIFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozNDowMyw3NjcgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsODM5IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM0OjAzLDg0MSBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAxOTozNDowMyw4NDMgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6MzQ6MDMsODQ1IFtXb3JrZXItNTY6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VKYXJcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM0OjAzLDg1NyBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozNDowMyw4NTkgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM0OjAzLDg2MCBbV29ya2VyLTU2OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTozNDowMyw4NjIgW1dvcmtlci01NjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM0OjUzLDk5OCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6MzQ6NTMsOTk4IFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjM3OjA5LDcyMSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6Mzc6MDksODEzIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjM3OjA5LDgxNCBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjM3OjA5LDg4NiBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozNzowOSw4ODYgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozNzowOSw5NzYgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM3OjA5LDk3OCBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM3OjA5LDk3OSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6Mzc6MDksOTgxIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6Mzc6MDksOTgxIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozNzowOSw5ODEgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozNzowOSw5ODQgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM3OjMwLDIyMCBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjM3OjMwLDIyMCBbV29ya2VyLTY3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE5OjM3OjM3LDgxMCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6Mzc6MzcsODEwIFtXb3JrZXItNjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjM5OjIxLDA4NyBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozOToyMSwwODggW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTozOToyMSwwOTMgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM5OjIxLDA5OCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjM5OjIxLDA5OSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6Mzk6MjEsMTAxIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6Mzk6MjEsMTAyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozOToyMSwxMDIgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTozOToyMSwxMDcgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjM5OjM5LDYzOSBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6Mzk6MzksNjM5IFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjQxOjE0LDg5MCBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjQxOjE0LDg5MCBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE5OjQxOjIyLDMwMyBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDE6MjIsMzAzIFtXb3JrZXItNjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjQyOjUxLDczOSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6NDI6NTEsNzg3IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjQyOjUxLDc4OCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjQyOjUxLDg2OSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0Mjo1MSw4NjkgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0Mjo1MiwyNTcgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjQyOjUyLDI1OCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjQyOjUyLDI2MCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6NDI6NTIsMjYxIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6NDI6NTIsMjYyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo0Mjo1MiwyNjIgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo0Mjo1MiwyNjYgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjQyOjU4LDAxOSBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjQyOjU4LDAxOSBbV29ya2VyLTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGNsZWFuIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGNsZWFuCisyMDIwLTA2LTE5IDE5OjQzOjA1LDg1OCBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDM6MDUsODU4IFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjQzOjM2LDI5NSBbV29ya2VyLTY3OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NDM6MzYsMjk2IFtXb3JrZXItNjc6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjQ2OjM4LDk2MCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6NDY6MzksMDA1IFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDAwNiBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDA3MiBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0NjozOSwwNzIgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAxOTo0NjozOSwzMDYgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDMwOCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDE5OjQ2OjM5LDMwOSBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6NDY6MzksMzEwIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6NDY6MzksMzExIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo0NjozOSwzMTEgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAxOTo0NjozOSwzMTQgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDE5OjQ2OjQ3LDc2NSBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMTk6NDY6NDcsNzY1IFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDE5OjU1OjQyLDE1NyBbV29ya2VyLTY3OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NTU6NDIsMTU4IFtXb3JrZXItNjc6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDEyNiBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMTk6NTU6NDYsMTY2IFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDE2NyBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDM0NSBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6NTU6NDYsMzQ3IFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMTk6NTU6NDYsMzQ4IFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAxOTo1NTo0NiwzNTAgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAxOTo1NTo0NiwzNTAgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDM1MCBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDE5OjU1OjQ2LDM1NCBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMTk6NTU6NTMsMTc5IFtXb3JrZXItNzI6IExvYWRpbmcgRWZmZWN0aXZlIFBPTS4uLl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMTk6NTU6NTMsMTgwIFtXb3JrZXItNzI6IExvYWRpbmcgRWZmZWN0aXZlIFBPTS4uLl0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDowNTo0NiwyMTYgW1dvcmtlci03MzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA1OjQ2LDIyMCBbV29ya2VyLTczOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA1OjQ2LDIyMyBbV29ya2VyLTczOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDU6NDYsMjI1IFtXb3JrZXItNzM6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDU6NTYsMjcxIFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDowNTo1NiwyNzEgW1dvcmtlci03MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMjA6MDY6MDYsNTg0IFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDY6MDYsNTg0IFtXb3JrZXItNzI6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMjA6MDY6MTMsODA0IFtXb3JrZXItNzQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgwOSBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDY6MTMsODEwIFtXb3JrZXItNzQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgxNCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDY6MTMsODE0IFtXb3JrZXItNzQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA2OjEzLDgxNCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDY6MTMsODIxIFtXb3JrZXItNzQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA2OjEzLDk5NSBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MDY6MTMsOTk4IFtXb3JrZXItNzQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA2OjE0LDAwMCBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA2OjE0LDAwMSBbV29ya2VyLTc0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowNjoxNCwwMDMgW1dvcmtlci03NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowNjoxOSw1NDMgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA2OjE5LDU0MyBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAyMDowNzo0NSwxMTIgW1dvcmtlci03MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA3OjQ1LDExNCBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA3OjQ1LDExNCBbV29ya2VyLTcyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDc6NDUsMTE2IFtXb3JrZXItNzI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDc6NTAsNjc0IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDowNzo1MCw2NzUgW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNDg3IFtXb3JrZXItNzI6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNjc0IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY3NiBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNjc4IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY3OSBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNjgwIFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjI0LDY4MCBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDg6MjQsNjg0IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA4OjI0LDc5NSBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODoyNCw3OTcgW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50XHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowODoyNCw3OTggW1dvcmtlci03NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MDg6MjQsODAwIFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MDg6MzQsNTA3IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDg6MzQsNTA4IFtXb3JrZXItNzM6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMjA6MDg6NDAsOTk4IFtXb3JrZXItNzQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODo0MSwwMDMgW1dvcmtlci03NDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDowODo0MSwwMDQgW1dvcmtlci03NDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjA4OjQxLDAwNSBbV29ya2VyLTc0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjA4OjQxLDAwNiBbV29ya2VyLTc0OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDg6NDEsMDA2IFtXb3JrZXItNzQ6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MDg6NDEsMDA5IFtXb3JrZXItNzQ6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDowODo0NiwyMjggW1dvcmtlci03MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjA4OjQ2LDIyOSBbV29ya2VyLTczOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAyMDoxMjo0NywyMjQgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDI3MSBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxMjo0NywyNzIgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxMjo0NywzNTYgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsMzU2IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsNjgzIFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoxMjo0Nyw2ODQgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0xOSAyMDoxMjo0Nyw2ODUgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDY4NyBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjEyOjQ3LDY4OCBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsNjg4IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MTI6NDcsNjkyIFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoxMzowNyw5MjIgW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjEzOjA3LDkyMiBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0xOSAyMDoxNDowNSw3MTggW1dvcmtlci03NzogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjE0OjA1LDcxOSBbV29ya2VyLTc3OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNDoxMSw4ODggW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDIwOjE0OjExLDkzNCBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNDoxMSw5MzUgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoxNDoxMiwxMDMgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjE0OjEyLDEwNCBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTE5IDIwOjE0OjEyLDEwNSBbV29ya2VyLTc1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MTQ6MTIsMTA3IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MTQ6MTIsMTA3IFtXb3JrZXItNzU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoxNDoxMiwxMDggW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoxNDoxMiwxMTEgW1dvcmtlci03NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjE2OjQ1LDA5OSBbV29ya2VyLTc2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MTY6NDUsMDk5IFtXb3JrZXItNzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDIwOjE3OjI5LDk5NSBbV29ya2VyLTczOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MTc6MjksOTk2IFtXb3JrZXItNzM6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjE3OjMzLDUyMiBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjAtMDYtMTkgMjA6MTc6MzMsNTU2IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjE3OjMzLDU1NyBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjE3OjMzLDY2NiBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MTc6MzMsNjY4IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MTc6MzMsNjY5IFtXb3JrZXItNzY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0xOSAyMDoxNzozMyw2NzEgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0xOSAyMDoxNzozMyw2NzEgW1dvcmtlci03NjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjE3OjMzLDY3MSBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjE3OjMzLDY3NSBbV29ya2VyLTc2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMTkgMjA6MTc6MzksNjQ1IFtXb3JrZXItNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlcworMjAyMC0wNi0xOSAyMDoxNzozOSw2NDUgW1dvcmtlci03NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMTkgMjA6MjM6NDksMzQ3IFtXb3JrZXItNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MjM6NDksMzQ3IFtXb3JrZXItNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMTkgMjA6MjQ6MDEsMDQyIFtXb3JrZXItNzc6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0xOSAyMDoyNDowMSwwNDMgW1dvcmtlci03NzogQ2xlYW5pbmcgc2VsZWN0ZWQgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MjQ6MDEsMjY4IFtXb3JrZXItNzM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI4NSBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MjQ6MDEsMjg2IFtXb3JrZXItNzM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI4OCBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MjQ6MDEsMjg4IFtXb3JrZXItNzM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI0OjAxLDI4OCBbV29ya2VyLTczOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MjQ6MDEsMjkzIFtXb3JrZXItNzM6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjI0OjExLDk3NyBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MjQ6MTEsOTc4IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTE5IDIwOjI2OjEyLDUxNSBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIwLTA2LTE5IDIwOjI2OjEyLDU1NSBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTIsNTU1IFtXb3JrZXItNzc6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI2OjEyLDc0NSBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL1V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvVXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTIsNzQ2IFtXb3JrZXItNzc6IENsZWFuaW5nIHNlbGVjdGVkIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDA1NCBbV29ya2VyLTc3OiBDbGVhbmluZyBzZWxlY3RlZCBwcm9qZWN0c10gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2xlYW5pbmcgZmlsdGVyZWQgZm9sZGVyIGZvciBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQyMiBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQyMyBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTMsNDI5IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQzNSBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTMsNDM2IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQ0MiBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTMsNDQzIFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiBHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTE5IDIwOjI2OjEzLDQ0MyBbV29ya2VyLTc1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTMsNDQ4IFtXb3JrZXItNzU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTE5IDIwOjI2OjE4LDY2NiBbV29ya2VyLTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMTkgMjA6MjY6MTgsNjY2IFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTIzIDE4OjQ1OjMwLDYyOSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIwLTA2LTIzIDE5OjA0OjA2LDQ3MiBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50CisyMDIwLTA2LTIzIDE5OjA0OjA2LDQ4OCBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yMyAxOTowNDoyOSw4NTggW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjA0OjI5LDg2MSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjMgMTk6MDQ6MjksODY0IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yMyAxOTowNDoyOSw4NjYgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA0OjMwLDc0NCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MDQ6MzAsNzQ3IFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA0OjMwLDc1MCBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MDQ6MzAsNzUyIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA0OjMxLDU3MiBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0yMyAxOTowNDozMSw1NzMgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0yMyAxOTowNDozMSw3MjUgW1dvcmtlci0xNjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjA0OjMxLDcyNyBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA0OjMxLDcyOSBbV29ya2VyLTE2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MDQ6MzEsNzMxIFtXb3JrZXItMTY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjMgMTk6MDQ6NTQsOTA0IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMjMgMTk6MDQ6NTQsOTA0IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgY2xlYW4gaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgY2xlYW4KKzIwMjAtMDYtMjMgMTk6MDU6MDAsNzMxIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yMyAxOTowNTowMCw3MzQgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yMyAxOTowNTowMCw3MzcgW1dvcmtlci0xMjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTIzIDE5OjA1OjAwLDczOSBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTIzIDE5OjA1OjAwLDc0MCBbV29ya2VyLTEyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMjMgMTk6MDU6MDAsNzQxIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjAtMDYtMjMgMTk6MDU6MDAsNzgzIFtXb3JrZXItMTI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yMyAxOTowNTowNSw3NDEgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTIzIDE5OjA1OjA1LDc0MSBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yMyAxOTowODoyMiw3MDIgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTIzIDE5OjA4OjIyLDcwMiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yMyAxOToyMjozMyw1NjggW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MjI6MzMsNTc3IFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yMyAxOToyMjozMyw1NzkgW1dvcmtlci05OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjMgMTk6MjI6MzMsNTgwIFtXb3JrZXItOTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yMyAxOToyMjozOCw2MjcgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbVNlcnZpY2VzCisyMDIwLTA2LTIzIDE5OjIyOjM4LDYyNyBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yNCAxNzowMzoxNSw3MDQgW1dvcmtlci02OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMC0wNi0yOSAxNjo1MToxNSw0MzggW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0wNi0yOSAxNzoyMjowOCw1NzEgW1dvcmtlci0xNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIwLTA2LTI5IDE3OjI1OjA2LDU3OCBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAxNzoyNTowNiw1NzkgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAxNzoyNTozNiw5ODIgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjI1OjM2LDk4NSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MjU6MzYsOTg4IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTozNiw5OTAgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjM4LDM3MCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6MzgsMzgwIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjM4LDM4NCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6MzgsMzg2IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjM5LDI4OSBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvVXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9VdGlscy90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0yOSAxNzoyNTozOSwyOTAgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMC0wNi0yOSAxNzoyNTozOSwzNTAgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjI1OjM5LDM2NiBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjM5LDM2OCBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MjU6MzksMzcyIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MjU6NDMsNzgyIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMjkgMTc6MjU6NDMsNzg3IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTo0Myw3ODkgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MjU6NDMsNzkxIFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTo0Myw3OTQgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MjU6NDQsMDg2IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9VdGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL1V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTI5IDE3OjI1OjQ0LDA4NyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIwLTA2LTI5IDE3OjI1OjQ0LDA4NyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjAtMDYtMjkgMTc6MjU6NDQsMDk1IFtXb3JrZXItMTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzoyNTo0NCwwOTcgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAxNzoyNTo0NCwxMDMgW1dvcmtlci0xNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjI1OjQ0LDExNyBbV29ya2VyLTE3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjI1OjUwLDg4NyBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMTc6MjU6NTAsODg3IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDE3OjM2OjE0LDM3OSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMTc6MzY6MTQsMzc5IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDE3OjM2OjM0LDM3NSBbV29ya2VyLTI2OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6MzY6MzQsMzc5IFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6MzY6MzQsMzgyIFtXb3JrZXItMjY6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzozNjozNCwzODQgW1dvcmtlci0yNjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAxNzozNjo0MywzMDUgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDE3OjM2OjQzLDMwNSBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAxNzo0Nzo0MCw0MTMgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDE3OjQ3OjQwLDQxMyBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAxNzo0Nzo1Miw0OTkgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjQ3OjUyLDUwMSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjQ3OjUyLDUwMiBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMTc6NDc6NTIsNTA0IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMTc6NDc6NTcsNzcwIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAxNzo0Nzo1Nyw3NzAgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMTc6NTM6MDYsNzQ5IFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAxNzo1MzowNiw3NTAgW1dvcmtlci0zMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMTc6NTM6MTYsMTQ4IFtXb3JrZXItMzA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAxNzo1MzoxNiwxNTAgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAxNzo1MzoxNiwxNTQgW1dvcmtlci0zMDogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDE3OjUzOjE2LDE1NiBbV29ya2VyLTMwOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDE3OjUzOjIzLDQ2NCBbV29ya2VyLTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMTc6NTM6MjMsNDY0IFtXb3JrZXItMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDIzOjAwOjQ1LDMzNSBbV29ya2VyLTU3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MDA6NDUsMzM3IFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MDA6NDUsMzM5IFtXb3JrZXItNTc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzowMDo0NSwzNDAgW1dvcmtlci01NzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzowMDo1Myw5MjIgW1dvcmtlci01ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDIzOjAwOjUzLDkyMiBbV29ya2VyLTU4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAyMzowODoyNCw2ODcgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjA4OjI0LDY5MiBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjA4OjI0LDcwNiBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MDg6MjQsNzEzIFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MDg6MzAsMjg1IFtXb3JrZXItNTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzowODozMCwyODUgW1dvcmtlci01OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMjM6MTg6MjEsNjgwIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzoxODoyMSw2ODAgW1dvcmtlci00ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMjM6MTg6MzAsMTE2IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzoxODozMCwxMTcgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAyMzoxODozMCwxMTggW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjE4OjMwLDEyMCBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjE4OjM1LDM2MCBbV29ya2VyLTYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMjM6MTg6MzUsMzYwIFtXb3JrZXItNjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDIzOjIyOjIwLDA2NyBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MjI6MjAsMDY4IFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MjI6MjAsMDcwIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzoyMjoyMCwwNzEgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzoyMjoyNywwNzkgW1dvcmtlci02MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDIzOjIyOjI3LDA4MCBbV29ya2VyLTYzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAyMzoyNDowMCwyMzQgW1dvcmtlci02ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjI0OjAwLDIzNiBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjI0OjAwLDI0MCBbV29ya2VyLTY4OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MjQ6MDAsMjQyIFtXb3JrZXItNjg6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MjQ6MDUsMjY0IFtXb3JrZXItNjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlcworMjAyMC0wNi0yOSAyMzoyNDowNSwyNjQgW1dvcmtlci02NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjAtMDYtMjkgMjM6MzA6MDksODg4IFtXb3JrZXItNjI6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzozMDowOSw4OTIgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAyMzozMDowOSw4OTQgW1dvcmtlci02MjogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjMwOjA5LDg5NSBbV29ya2VyLTYyOiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjMwOjE0LDc2MCBbV29ya2VyLTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXMKKzIwMjAtMDYtMjkgMjM6MzA6MTQsNzYwIFtXb3JrZXItNjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlc19XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIwLTA2LTI5IDIzOjMyOjE0LDM0NiBbV29ya2VyLTY5OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MzI6MTQsMzQ4IFtXb3JrZXItNjk6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6MzI6MTQsMzQ5IFtXb3JrZXItNjk6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzozMjoxNCwzNTEgW1dvcmtlci02OTogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzozMjoxOCw1NTMgW1dvcmtlci02OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDIzOjMyOjE4LDU1MyBbV29ya2VyLTY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNi0yOSAyMzozNDowNCwzNjMgW1dvcmtlci02NTogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjM0OjA0LDM2NSBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjM0OjA0LDM2OSBbV29ya2VyLTY1OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6MzQ6MDQsMzcxIFtXb3JrZXItNjU6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6NDQ6MTksNDAyIFtXb3JrZXItNDg6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzo0NDoxOSw0MDQgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMC0wNi0yOSAyMzo0NDoxOSw0MDYgW1dvcmtlci00ODogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIwLTA2LTI5IDIzOjQ0OjE5LDQwNyBbV29ya2VyLTQ4OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIwLTA2LTI5IDIzOjQ3OjM0LDYwOCBbV29ya2VyLTcwOiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjAtMDYtMjkgMjM6NDc6MzQsNjE0IFtXb3JrZXItNzA6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXNcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjAtMDYtMjkgMjM6NDc6MzQsNjE3IFtXb3JrZXItNzA6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMC0wNi0yOSAyMzo0NzozNCw2MTkgW1dvcmtlci03MDogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMC0wNi0yOSAyMzo0NzozOCw0MjQgW1dvcmtlci03MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIwLTA2LTI5IDIzOjQ3OjM4LDQyNCBbV29ya2VyLTcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMC0wNy0wMSAxMjoyOToxNCw3NzAgW1dvcmtlci03OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0xMC0xMiAxMjoxNTozNSwwNjUgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMC0xMC0xNSAwOTo1Mjo1NCwzNjUgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0wOS0yNCAxODoyNjo1OSw5MTYgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0wOS0yNCAxODoyODo1OSw5MzAgW1dvcmtlci0xMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlc1xXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTI0IDE4OjI4OjU5LDkzMyBbV29ya2VyLTEwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXNfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0wOS0yOCAwOTowNzo1NywzNjEgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0wOS0yOCAwOToyMToxNSwxMDcgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0wOS0yOCAwOToyMzo0MiwzOTYgW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6MjM6NDUsMzM5IFtXb3JrZXItMjogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gRVJST1Igby5lLm0uai5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IgLSBDb3VsZCBub3QgZG93bmxvYWQgc291cmNlcyBmb3IgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIxLTA5LTI4IDA5OjIzOjQ4LDM3NCBbV29ya2VyLTE6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvR2xlbW1DbGllbnQvc3JjCisyMDIxLTA5LTI4IDA5OjIzOjQ4LDM3OCBbV29ya2VyLTE6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL0dsZW1tQ2xpZW50L3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9HbGVtbUNsaWVudC9zcmMKKzIwMjEtMDktMjggMDk6MjM6NDgsNzI0IFtXb3JrZXItMTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMjAgc2VjCisyMDIxLTA5LTI4IDA5OjIzOjQ5LDQ5MSBbV29ya2VyLTQ6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIGphdmFkb2MgZm9yIGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVAorb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb246IENvdWxkIG5vdCByZXNvbHZlIGFydGlmYWN0IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjY1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMS0wOS0yOCAwOToyNjo1MSwwNjQgW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4xLVNOQVBTSE9UIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6Mjc6MDIsMDU4IFtXb3JrZXItMTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYworMjAyMS0wOS0yOCAwOToyNzowMiwwNTkgW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gTm90IGFkZGluZyBzb3VyY2UgZm9sZGVyIC9HbGVtbVNlcnZpY2VzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9HbGVtbVNlcnZpY2VzL3NyYworMjAyMS0wOS0yOCAwOToyNzowMywxOTQgW1dvcmtlci0xOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIEVSUk9SIG8uZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IgLSBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMKK29yZy5lY2xpcHNlLm0yZS53dHAuTWFya2VkRXhjZXB0aW9uOiBVbmFibGUgdG8gY29uZmlndXJlIEdsZW1tU2VydmljZXMKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5OSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IuY29uZmlndXJlKFdUUFByb2plY3RDb25maWd1cmF0b3IuamF2YTo2OCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5wcm9qZWN0LmNvbmZpZ3VyYXRvci5BYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuY29uZmlndXJlKEFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5qYXZhOjEyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDgpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5jb25maWd1cmVOZXdNYXZlblByb2plY3RzKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjI4OCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDEuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxNzUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5pbXBvcnRQcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxNDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkltcG9ydE1hdmVuUHJvamVjdHNKb2IkMS5kb0NyZWF0ZU1hdmVuUHJvamVjdHMoSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5qYXZhOjY4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmUudWlfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5BYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24ucnVuKEFic3RyYWN0Q3JlYXRlTWF2ZW5Qcm9qZWN0c09wZXJhdGlvbi5qYXZhOjczKSBbb3JnLmVjbGlwc2UubTJlLmNvcmUudWlfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5JbXBvcnRNYXZlblByb2plY3RzSm9iLnJ1bkluV29ya3NwYWNlKEltcG9ydE1hdmVuUHJvamVjdHNKb2IuamF2YTo3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KSBbb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogT25lIG9yIG1vcmUgY29uc3RyYWludHMgaGF2ZSBub3QgYmVlbiBzYXRpc2ZpZWQuCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5SW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YTozNjMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubWVyZ2VDaGFuZ2VzSW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YToxMTgxKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0LmFjY2VzcyQyKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTExNykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdCQxLnJ1bihGYWNldGVkUHJvamVjdC5qYXZhOjMyNCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnkoRmFjZXRlZFByb2plY3QuamF2YTozMzkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlKFdlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjEzNikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5NSkgfltuYTpuYV0KKwkuLi4gMjAgY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTA5LTI4IDA5OjI3OjAzLDI4NyBbV29ya2VyLTE6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDEzIHNlYworMjAyMS0wOS0yOCAwOTo0NTo0NSw0NzEgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ1OjQ1LDcyNCBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLmVjbGlwc2UubTJlLmpkdC5KYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6NDU6NDUsNzU1IFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NTo0NSw5MTMgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczpHbGVtbVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ1OjQ1LDk5MyBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDU6NDcsMDQzIFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvSnNvblRyYXZlcnNlL3NyYworMjAyMS0wOS0yOCAwOTo0NTo0NywwNDUgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvSnNvblRyYXZlcnNlL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC9Kc29uVHJhdmVyc2Uvc3JjCisyMDIxLTA5LTI4IDA5OjQ1OjQ3LDI2OSBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAyIHNlYworMjAyMS0wOS0yOCAwOTo0NjoxNSwxMjUgW1dvcmtlci0xNjogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMS0wOS0yOCAwOTo0NjoxNSwzODIgW1dvcmtlci0xNjogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ2OjE1LDM4MyBbV29ya2VyLTE2OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NjoxNSw1MzAgW1dvcmtlci0xNjogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIEFkZGluZyBzb3VyY2UgZm9sZGVyIC90ZXN0cy9zcmMKKzIwMjEtMDktMjggMDk6NDY6MTUsNTMyIFtXb3JrZXItMTY6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3Rlc3RzL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC90ZXN0cy9zcmMKKzIwMjEtMDktMjggMDk6NDY6MTUsNjgxIFtXb3JrZXItMTY6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyIC0gSW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgMSBwcm9qZWN0KHMpIGluIDAgc2VjCisyMDIxLTA5LTI4IDA5OjQ2OjE2LDYyNSBbV29ya2VyLTE1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ2OjE2LDYyNiBbV29ya2VyLTE1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDY6MTYsNjQ5IFtXb3JrZXItMTU6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIHNvdXJjZXMgZm9yIGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6amFyOnNvdXJjZXM6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNTQpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIxLTA5LTI4IDA5OjQ2OjE2LDY3NiBbV29ya2VyLTE1OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBqYXZhZG9jIGZvciBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOmphcjpqYXZhZG9jOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjY1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMS0wOS0yOCAwOTo0Njo0NCw0NTAgW1dvcmtlci0xNTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6NDY6NDQsNjUyIFtXb3JrZXItMTU6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtU05BUFNIT1QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0wOS0yOCAwOTo0Njo0NCw3NDkgW1dvcmtlci0xNTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0Njo0NCw3NTEgW1dvcmtlci0xNTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ2OjQ1LDIwNSBbV29ya2VyLTE1OiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmouaS5BYnN0cmFjdEphdmFQcm9qZWN0Q29uZmlndXJhdG9yIC0gQWRkaW5nIHNvdXJjZSBmb2xkZXIgL3V0aWxzL3NyYworMjAyMS0wOS0yOCAwOTo0Njo0NSwyMDYgW1dvcmtlci0xNTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvdXRpbHMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3V0aWxzL3NyYworMjAyMS0wOS0yOCAwOTo0Njo0NSwzNzcgW1dvcmtlci0xNTogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Qcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIgLSBJbXBvcnRlZCBhbmQgY29uZmlndXJlZCAxIHByb2plY3QocykgaW4gMSBzZWMKKzIwMjEtMDktMjggMDk6NDc6MDUsMjU2IFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6NDc6MDUsNDM4IFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcuZWNsaXBzZS5tMmUuamR0LkphckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6dGVzdHM6MC4xIEAgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNccG9tLnhtbC4KKzIwMjEtMDktMjggMDk6NDc6MDUsNTA4IFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NzowNSw1MTAgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MDUsNTEzIFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MDYsMDczIFtXb3JrZXItMTM6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlSmFyL3NyYworMjAyMS0wOS0yOCAwOTo0NzowNiwwNzQgW1dvcmtlci0xMzogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5qLmkuQWJzdHJhY3RKYXZhUHJvamVjdENvbmZpZ3VyYXRvciAtIE5vdCBhZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlSmFyL3NyYy90ZXN0L2phdmEgYmVjYXVzZSBpdCBvdmVybGFwcyB3aXRoIC93Zm9ybVNlcnZpY2VKYXIvc3JjCisyMDIxLTA5LTI4IDA5OjQ3OjA2LDE5NyBbV29ya2VyLTEzOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAxIHNlYworMjAyMS0wOS0yOCAwOTo0NzoyNCw1MDggW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIxLTA5LTI4IDA5OjQ3OjI0LDYxMSBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjI0LDYxMiBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MjQsNjEzIFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTI4IDA5OjQ3OjI0LDcwMyBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MjQsODE3IFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MjQsODE5IFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0yOCAwOTo0NzoyNCw4MTkgW1dvcmtlci0xMDogSW1wb3J0aW5nIE1hdmVuIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMjggMDk6NDc6MjUsMTExIFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBBZGRpbmcgc291cmNlIGZvbGRlciAvd2Zvcm1TZXJ2aWNlcy9zcmMKKzIwMjEtMDktMjggMDk6NDc6MjUsMTEyIFtXb3JrZXItMTA6IEltcG9ydGluZyBNYXZlbiBwcm9qZWN0c10gSU5GTyAgby5lLm0uai5pLkFic3RyYWN0SmF2YVByb2plY3RDb25maWd1cmF0b3IgLSBOb3QgYWRkaW5nIHNvdXJjZSBmb2xkZXIgL3dmb3JtU2VydmljZXMvc3JjL3Rlc3QvamF2YSBiZWNhdXNlIGl0IG92ZXJsYXBzIHdpdGggL3dmb3JtU2VydmljZXMvc3JjCisyMDIxLTA5LTI4IDA5OjQ3OjI1LDM2OSBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIEVSUk9SIG8uZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IgLSBVbmFibGUgdG8gY29uZmlndXJlIHdmb3JtU2VydmljZXMKK29yZy5lY2xpcHNlLm0yZS53dHAuTWFya2VkRXhjZXB0aW9uOiBVbmFibGUgdG8gY29uZmlndXJlIHdmb3JtU2VydmljZXMKKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5OSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLldUUFByb2plY3RDb25maWd1cmF0b3IuY29uZmlndXJlKFdUUFByb2plY3RDb25maWd1cmF0b3IuamF2YTo2OCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5wcm9qZWN0LmNvbmZpZ3VyYXRvci5BYnN0cmFjdExpZmVjeWNsZU1hcHBpbmcuY29uZmlndXJlKEFic3RyYWN0TGlmZWN5Y2xlTWFwcGluZy5qYXZhOjEyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDMuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDgpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQzLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci51cGRhdGVQcm9qZWN0Q29uZmlndXJhdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YTo1MDEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5jb25maWd1cmVOZXdNYXZlblByb2plY3RzKFByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5qYXZhOjI4OCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLnByb2plY3QuUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyJDEuY2FsbChQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxNzUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciQxLmNhbGwoUHJvamVjdENvbmZpZ3VyYXRpb25NYW5hZ2VyLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5wcm9qZWN0LlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlci5pbXBvcnRQcm9qZWN0cyhQcm9qZWN0Q29uZmlndXJhdGlvbk1hbmFnZXIuamF2YToxNDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS51aS5pbnRlcm5hbC53aXphcmRzLkltcG9ydE1hdmVuUHJvamVjdHNKb2IkMS5kb0NyZWF0ZU1hdmVuUHJvamVjdHMoSW1wb3J0TWF2ZW5Qcm9qZWN0c0pvYi5qYXZhOjY4KSBbb3JnLmVjbGlwc2UubTJlLmNvcmUudWlfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5BYnN0cmFjdENyZWF0ZU1hdmVuUHJvamVjdHNPcGVyYXRpb24ucnVuKEFic3RyYWN0Q3JlYXRlTWF2ZW5Qcm9qZWN0c09wZXJhdGlvbi5qYXZhOjczKSBbb3JnLmVjbGlwc2UubTJlLmNvcmUudWlfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUudWkuaW50ZXJuYWwud2l6YXJkcy5JbXBvcnRNYXZlblByb2plY3RzSm9iLnJ1bkluV29ya3NwYWNlKEltcG9ydE1hdmVuUHJvamVjdHNKb2IuamF2YTo3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlLnVpXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLkludGVybmFsV29ya3NwYWNlSm9iLnJ1bihJbnRlcm5hbFdvcmtzcGFjZUpvYi5qYXZhOjM5KSBbb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogT25lIG9yIG1vcmUgY29uc3RyYWludHMgaGF2ZSBub3QgYmVlbiBzYXRpc2ZpZWQuCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubW9kaWZ5SW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YTozNjMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuaW50ZXJuYWwuRmFjZXRlZFByb2plY3QubWVyZ2VDaGFuZ2VzSW50ZXJuYWwoRmFjZXRlZFByb2plY3QuamF2YToxMTgxKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmludGVybmFsLkZhY2V0ZWRQcm9qZWN0LmFjY2VzcyQyKEZhY2V0ZWRQcm9qZWN0LmphdmE6MTExNykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdCQxLnJ1bihGYWNldGVkUHJvamVjdC5qYXZhOjMyNCkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIyODkpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5Xb3Jrc3BhY2UucnVuKFdvcmtzcGFjZS5qYXZhOjIzMTYpIH5bb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXNfMy4xMy4wLnYyMDE4MDUxMi0xMTM4LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5pbnRlcm5hbC5GYWNldGVkUHJvamVjdC5tb2RpZnkoRmFjZXRlZFByb2plY3QuamF2YTozMzkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLnd0cC5XZWJQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuY29uZmlndXJlKFdlYlByb2plY3RDb25maWd1cmF0b3JEZWxlZ2F0ZS5qYXZhOjEzNikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUud3RwLkFic3RyYWN0UHJvamVjdENvbmZpZ3VyYXRvckRlbGVnYXRlLmNvbmZpZ3VyZVByb2plY3QoQWJzdHJhY3RQcm9qZWN0Q29uZmlndXJhdG9yRGVsZWdhdGUuamF2YTo5NSkgfltuYTpuYV0KKwkuLi4gMjAgY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTA5LTI4IDA5OjQ3OjI1LDQwOSBbV29ya2VyLTEwOiBJbXBvcnRpbmcgTWF2ZW4gcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLlByb2plY3RDb25maWd1cmF0aW9uTWFuYWdlciAtIEltcG9ydGVkIGFuZCBjb25maWd1cmVkIDEgcHJvamVjdChzKSBpbiAxIHNlYworMjAyMS0wOS0yOCAwOTo0ODoyNiw2MTggW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMDktMjggMDk6NDg6MjYsNjIxIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0wOS0yOCAwOTo0ODo1NSwwNTkgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMDktMjggMDk6NDg6NTUsMDYwIFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0wOS0yOCAxMTowNzoxMCw4MjkgW1dvcmtlci0xOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0wOS0yOSAxNjoyMTo1Myw1MDcgW1dvcmtlci04OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0wOS0zMCAxMzowMjo1MywwMDQgW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0wOS0zMCAxMzoxMzoxOCw5NjUgW1dvcmtlci03OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMDktMzAgMTQ6MzY6MTUsNjY1IFtXb3JrZXItMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE0OjM2OjE1LDY2OCBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTQ6NDA6MTAsOTYyIFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE0OjQwOjEwLDk2MyBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6MTc6MDMsNjI3IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjE3OjAzLDYyOSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6MTg6MTIsNDEwIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjE4OjEyLDQxMSBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6MjU6MzksNzAxIFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjI1OjM5LDcwMiBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6MzA6MDksMzYwIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMDktMzAgMTc6MzA6MDksMzYwIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6MzA6MzQsNDg2IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjMwOjM0LDQ4NyBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6Mzc6MDQsMDM0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMDktMzAgMTc6Mzc6MDQsMDM0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6Mzc6MjEsNzUxIFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjM3OjIxLDc1MSBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6Mzg6MjYsOTY5IFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0wOS0zMCAxNzozODoyNiw5NjkgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6Mzg6NDIsNjU0IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMDktMzAgMTc6Mzg6NDIsNjU0IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6Mzg6NTksMjYyIFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphcgorMjAyMS0wOS0zMCAxNzozODo1OSwyNjMgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6Mzk6NTIsNDcxIFtXb3JrZXItNDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjM5OjUyLDQ3MSBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6NDI6MzcsMjU0IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMDktMzAgMTc6NDI6MzcsMjU0IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6NDM6NTgsMjE1IFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjQzOjU4LDIxNSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6NTM6MTMsNzgyIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMDktMzAgMTc6NTM6MTMsNzgyIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6NTM6NDUsNjcxIFtXb3JrZXItNDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTA5LTMwIDE3OjUzOjQ1LDY3MSBbV29ya2VyLTQ5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMDktMzAgMTc6NTY6MjgsMzYyIFtXb3JrZXItNDg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMCwyOTYgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMCwyOTkgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjMwLDU2MiBbV29ya2VyLTQ4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzo1NjozMSwwNTEgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjMxLDA1MSBbV29ya2VyLTQ4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMSwwNTUgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMSw0NTAgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMSw0NTIgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjMxLDQ1MiBbV29ya2VyLTQ4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1NjozMSw0NjEgW1dvcmtlci00ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTY6MzQsOTc1IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjM0LDk3NyBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6MzQsOTgyIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjM0LDk4NSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6MzcsMTgxIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjM3LDE4NCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1NjozNywxODkgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6MzcsMTkxIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjM3LDcwMCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTA5LTMwIDE3OjU2OjM3LDcwMiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6MzcsNzIwIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjM3LDcyMiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjM3LDcyNiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1NjozNyw3MjkgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1NjozNyw3MzIgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTY6MzcsNzM2IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzo1NjozOCwyNzEgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6NDMsMTE3IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1Njo0MywxMzIgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6NDMsMTM1IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDEzOCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0MywxNDEgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudFxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsMzE5IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDMyNSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphclxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsMzI4IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDMzMyBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNTc2IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNTc3IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1Njo0Myw1NzggW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNTkwIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDU5NCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDYwNiBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0Myw2MDggW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1Njo0Myw2MDkgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIHdmb3JtU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsNjEwIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gRXhlY3V0aW5nIHJlc291cmNlIGZpbHRlcmluZyBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMS0wOS0zMCAxNzo1Njo0Myw2MjEgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMDktMzAgMTc6NTY6NDMsOTQ5IFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0wOS0zMCAxNzo1Njo0Myw5NDkgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsOTUyIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMDktMzAgMTc6NTY6NDMsOTczIFtXb3JrZXItNTI6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTA5LTMwIDE3OjU2OjQzLDk3NSBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTA5LTMwIDE3OjU2OjQzLDk4NCBbV29ya2VyLTUyOiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0wOS0zMCAxNzo1Njo0Myw5ODYgW1dvcmtlci01MjogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0wOS0zMCAxNzo1NzowNCwzNjYgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0wOS0zMCAxNzo1NzowNCwzNjcgW1dvcmtlci01MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0wOS0zMCAxNzo1NzoyMCwwMjYgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMDktMzAgMTc6NTc6MjAsMDI2IFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAwOTo0OTo0MCw4MzQgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0wNSAxMDowMzoxNiw3NjkgW1dvcmtlci01OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0wNSAxMTowMzo1NSwwMTAgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMDUgMTE6MDM6NTUsMDEzIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0wNSAxMTozNzoxNyw5MDAgW1dvcmtlci0yMDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTA1IDExOjQ4OjQ0LDE0NSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMTo0ODo0NCwxNDUgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDExOjUzOjI2LDA0OSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMTo1MzoyNiwwNDkgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDExOjU3OjAxLDU0OSBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMTo1NzowMSw1NTAgW1dvcmtlci0zMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDExOjU5OjA3LDUzOSBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMTo1OTowNyw1MzkgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDEyOjI3OjU4LDM5MyBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMjoyNzo1OCwzOTMgW1dvcmtlci0zMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDEyOjQ4OjIyLDgxMiBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMjo0ODoyMiw4MTMgW1dvcmtlci0yNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDEzOjE2OjAyLDgwNiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMzoxNjowMiw4MDYgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDEzOjE4OjI0LDc0MiBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMzoxODoyNCw3NDIgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDEzOjI3OjMxLDM3MiBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTA1IDEzOjI3OjMxLDM3MyBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDEzOjI3OjUyLDQzMCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMDUgMTM6Mjc6NTIsNDMzIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMDUgMTM6Mjc6NTIsNDM4IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyNzo1Miw0MzkgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyNzo1NCwxNDcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI3OjU0LDE1MCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMDUgMTM6Mjc6NTQsMTU3IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyNzo1NCwxNTkgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI3OjU0LDc5NyBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNSAxMzoyNzo1NCw3OTkgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNSAxMzoyNzo1NSwxNTEgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI3OjU1LDE1NCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyNzo1NSwxNTcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI3OjU1LDE1OSBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0wNSAxMzoyODowMCwxNTcgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNSAxMzoyODowMCwxNzQgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTA1IDEzOjI4OjAwLDE3NiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsMTkyIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0wNSAxMzoyODowMCwxOTUgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI4OjAwLDU0NiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNSAxMzoyODowMCw1NDggW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNSAxMzoyODowMCw1NDkgW1dvcmtlci0zNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTA1IDEzOjI4OjAwLDU4MiBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsNTg0IFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI4OjAwLDU4OCBbV29ya2VyLTM3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMDUgMTM6Mjg6MDAsNTkyIFtXb3JrZXItMzc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTA1IDEzOjI4OjU2LDQ1NSBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0wNSAxMzoyODo1Niw0NTUgW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA1IDIyOjM4OjE2LDEwOCBbV29ya2VyLTM6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTEwLTA2IDEyOjQ4OjIwLDczOSBbV29ya2VyLTU6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTA2IDE5OjQ0OjIzLDkwNyBbV29ya2VyLTQ2OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMDYgMTk6NDU6NDMsNzc5IFtXb3JrZXItMzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTA2IDE5OjQ1OjQzLDc5NyBbV29ya2VyLTM4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDYgMjA6MTY6MjMsMzU0IFtXb3JrZXItNDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTA2IDIwOjE2OjIzLDM1NiBbV29ya2VyLTQ3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDYgMjA6MzQ6MDUsMDY2IFtXb3JrZXItNTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTA2IDIwOjM0OjA1LDA2NiBbV29ya2VyLTU0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDYgMjA6NTM6NTgsNTg5IFtXb3JrZXItNjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTA2IDIwOjUzOjU4LDU4OSBbV29ya2VyLTYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDYgMjE6Mzc6NTcsNDUwIFtXb3JrZXItNjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTA2IDIxOjM3OjU3LDQ1MSBbV29ya2VyLTY2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMDcgMTA6MTk6MzIsNTA4IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMDcgMTA6MjI6NDUsODIxIFttYWluXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0wNyAxMDoyMjo0NSw4MzAgW21haW5dIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDcgMTA6MjI6NDUsODMxIFttYWluXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMDcgMTA6MjI6NTIsNDgxIFttYWluXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIxLTEwLTA3IDE4OjAwOjUwLDE3MiBbV29ya2VyLTgxOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMDggMTI6MDA6MjgsMTc1IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMDggMTI6MDI6MTMsOTMwIFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMDggMTI6MDI6MTMsOTQ0IFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTA4IDE3OjIzOjIxLDAxNyBbV29ya2VyLTQ1OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMTEgMDk6NDA6MDIsMzEyIFtXb3JrZXItMjogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMTEgMDk6NDE6MDYsODY1IFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTEgMDk6NDE6MDYsODY3IFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTExIDExOjMyOjM1LDQ4NyBbV29ya2VyLTEyOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTEgMTE6MzI6MzUsNTAyIFtXb3JrZXItMTI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTExIDE3OjA2OjA4LDU1MCBbV29ya2VyLTI1OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMTEgMTc6MTA6NTgsMjQ4IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTExIDE3OjEwOjU4LDI0OCBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTEgMTc6NTc6MzEsMzcyIFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTExIDE3OjU3OjMxLDM3MiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTIgMTk6NTY6MTgsODIyIFtXb3JrZXItNDMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMiAxOTo1NjoxOCw4MjYgW1dvcmtlci00MzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xMiAyMDoxMjo1MCw4NDUgW1dvcmtlci00NTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTEyIDIwOjEyOjUwLDg0NiBbV29ya2VyLTQ1MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTEzIDEyOjI3OjQzLDc1OSBbV29ya2VyLTY5OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTMgMTI6Mjc6NDMsNzczIFtXb3JrZXItNjk5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTMgMTI6MzU6NTAsOTIyIFtXb3JrZXItNzA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMyAxMjozNTo1MCw5MjIgW1dvcmtlci03MDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xMyAxMjozNzoxNCwzNjQgW1dvcmtlci03MDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTEzIDEyOjM3OjE0LDM2NCBbV29ya2VyLTcwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTEzIDEyOjQxOjA0LDQ1NCBbV29ya2VyLTcwMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTMgMTI6NDE6MDQsNDU0IFtXb3JrZXItNzAyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTMgMTI6NDI6MjgsMzkxIFtXb3JrZXItNzA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xMyAxMjo0MjoyOCwzOTEgW1dvcmtlci03MDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xMyAxOTo1Nzo0Nyw3MTYgW1dvcmtlci04MjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTEzIDE5OjU3OjQ3LDcxOSBbV29ya2VyLTgyMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDA4OjQ5OjMyLDYzMiBbV29ya2VyLTU6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTE0IDA4OjUzOjEzLDU4MSBbV29ya2VyLTExOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMTQgMDk6MDc6NDEsNDkyIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDA5OjA3OjQxLDQ5NCBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTQgMDk6MzE6MDUsMDQ2IFtXb3JrZXItMjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDA5OjMxOjA1LDA0NiBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTQgMDk6Mzg6NTAsNTUwIFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDA5OjM4OjUwLDU1MCBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTQgMTE6NDk6MzMsODQ1IFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDExOjQ5OjMzLDg0NyBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTQgMTE6NTc6MjEsNTY4IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDExOjU3OjIxLDU2OSBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTQgMTc6Mzc6NTAsNDM5IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNCAxNzozNzo1MCw0MzkgW1dvcmtlci0xMDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNCAxNzo1NDowNSwzNTEgW1dvcmtlci0xMTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE0IDE3OjU0OjA1LDM1MSBbV29ya2VyLTExMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE0IDE4OjE5OjMzLDY5NCBbV29ya2VyLTExOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTQgMTg6MTk6MzMsNjk0IFtXb3JrZXItMTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMDc6MTI6MjQsOTIzIFtXb3JrZXItMDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTAtMTUgMDc6Mjk6MjcsMzY2IFtXb3JrZXItNjogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTE1IDA3OjUyOjUyLDU0NCBbV29ya2VyLTE1OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTUgMDc6NTI6NTIsNTY0IFtXb3JrZXItMTU6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE1IDA4OjM3OjU4LDY2NCBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwODozNzo1OCw2NjQgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA4OjM5OjQ2LDI3NyBbV29ya2VyLTEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwODozOTo0NiwyNzcgW1dvcmtlci0xMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA4OjQwOjQxLDc3MyBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwODo0MDo0MSw3NzMgW1dvcmtlci0yMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA4OjQzOjQxLDE5MiBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTE1IDA4OjQzOjQxLDE5MiBbV29ya2VyLTIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA4OjQzOjU2LDQxNCBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwODo0Mzo1Niw0MTQgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA4OjU0OjQyLDcwMiBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwODo1NDo0Miw3MDIgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA4OjU5OjA0LDU0MyBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwODo1OTowNCw1NDMgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA5OjAyOjE3LDY1MyBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAwOTowMjoxNyw2NTMgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDA5OjA3OjAxLDE4NiBbV29ya2VyLTY6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTE1IDExOjM2OjAzLDY4MyBbV29ya2VyLTI1OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMTUgMTE6NDQ6NDcsMTQ4IFtXb3JrZXItMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDExOjQ0OjQ3LDE1MCBbV29ya2VyLTI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTI6MTI6MjUsMDc2IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDEyOjEyOjI1LDA3NyBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTI6MjA6MTcsNzg1IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMTAtMTUgMTI6MjA6MTcsNzg2IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTI6MjA6MzIsMTE3IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDEyOjIwOjMyLDExOCBbV29ya2VyLTMzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTU6NTQ6MjcsNTcxIFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDE1OjU0OjI3LDU3NCBbV29ya2VyLTY4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTk6MjE6NDYsMDUxIFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxOToyMTo0NiwwNTIgW1dvcmtlci0xMDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAxOTozMDo1Miw5OTIgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDE5OjMwOjUyLDk5MiBbV29ya2VyLTEwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDE5OjMyOjMyLDgwOCBbV29ya2VyLTEwMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMTk6MzI6MzIsODA5IFtXb3JrZXItMTAxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTk6Mzk6MDQsOTgyIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxOTozOTowNCw5ODMgW1dvcmtlci0xMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xNSAxOTo1NDo1NCw4MDAgW1dvcmtlci0xMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE1IDE5OjU0OjU0LDgwMSBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE1IDE5OjU1OjQzLDYzNiBbV29ya2VyLTExNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTUgMTk6NTU6NDMsNjM3IFtXb3JrZXItMTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTUgMTk6NTc6MzIsNTczIFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xNSAxOTo1NzozMiw1NzQgW1dvcmtlci0xMTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxMzoxMDoxOCw3MTMgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0xOCAxMzoyODo0MCw1MjAgW1dvcmtlci0xMTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTE4IDEzOjMxOjQ1LDY5OCBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxMzozMTo0NSw3MjMgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE4IDEzOjQwOjM2LDc2OCBbV29ya2VyLTU6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOCAxMzo0MDozNiw3NzkgW1dvcmtlci01OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOCAxNTozNTozNiwyMjcgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTE4IDE1OjM1OjM2LDIzMCBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTE4IDE1OjM1OjM2LDIzNSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMTggMTU6MzU6MzYsMjM2IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZVxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMTggMTU6MzU6MzcsODQyIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0xOCAxNTozNTozNyw4NDQgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTE4IDE1OjM1OjM3LDg0OSBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMTggMTU6MzU6MzcsODUxIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0xOCAxNTozNTo0MSw2MTQgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmwuTGlmZWN5Y2xlTWFwcGluZ0ZhY3RvcnkgLSBVc2luZyBvcmcubWF2ZW4uaWRlLmVjbGlwc2Uud3RwLldhckxpZmVjeWNsZU1hcHBpbmcgbGlmZWN5Y2xlIG1hcHBpbmcgZm9yIE1hdmVuUHJvamVjdDogZGUua29yYXAuc2VydmljZXM6R2xlbW1TZXJ2aWNlczowLjEtVGVzdCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzXHBvbS54bWwuCisyMDIxLTEwLTE4IDE1OjM1OjQxLDc5NyBbV29ya2VyLTI3OiBCdWlsZCBQcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOCAxNTozNTo0MSw3OTkgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0xOCAxNTozNTo0MiwxODAgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTU6MzU6NDIsMTgyIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTU6MzU6NDQsNTg5IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0xOCAxNTozNTo0NCw1OTIgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMTggMTU6MzU6NDQsNTk1IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0xOCAxNTozNTo0NCw1OTcgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMTggMTU6MzU6NDQsNjAzIFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTU6MzU6NDQsNjU4IFtXb3JrZXItMjc6IEJ1aWxkIFByb2plY3RdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0xOCAxNTozNTo0NCw2NzMgW1dvcmtlci0yNzogQnVpbGQgUHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBDb3B5aW5nIDMgcmVzb3VyY2VzCisyMDIxLTEwLTE4IDE1OjUxOjI2LDM1MiBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNTo1MToyNiwzNTIgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE4IDE1OjU0OjA1LDk2NyBbV29ya2VyLTI2OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTggMTU6NTQ6MDUsOTY4IFtXb3JrZXItMjY6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE4IDE2OjI3OjM5LDAxNCBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNjoyNzozOSwwMTYgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE4IDE2OjM3OjUwLDg2MSBbV29ya2VyLTM3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNjozNzo1MCw4NjIgW1dvcmtlci0zNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE4IDE2OjQzOjI0LDMwNyBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE4IDE2OjQzOjI0LDMwNyBbV29ya2VyLTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNjo0NzozMSwzNDEgW1dvcmtlci00MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTY6NDc6MzEsMzQyIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNjo0Nzo0OSwwMDAgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTggMTY6NDc6NDksMDAxIFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOCAxNjo1MjoyOCw1ODYgW1dvcmtlci03OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0xOCAxNjo1NDowNSw0MjkgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNjo1NDowNSw0MzIgW1dvcmtlci01OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTggMTY6NTU6MjksNjA4IFtXb3JrZXItODogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTE4IDE2OjU3OjU3LDg4MiBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOCAxNjo1Nzo1Nyw4ODMgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE4IDE3OjA1OjAxLDM3NyBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE4IDE3OjA1OjAxLDM3OCBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOSAxMTo0NTo0Myw0ODkgW1dvcmtlci0xODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTE5IDExOjQ1OjQzLDQ5MSBbV29ya2VyLTE4MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE5IDEyOjM1OjM5LDYwNiBbV29ya2VyLTE4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTkgMTI6MzU6MzksNjA3IFtXb3JrZXItMTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTkgMTc6MjQ6MTgsMjQ5IFtXb3JrZXItMjIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0xOSAxNzoyNDoxOCwyNTAgW1dvcmtlci0yMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOSAxNzo0MzowNSw3MzMgW1dvcmtlci0yMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTE5IDE3OjQzOjA1LDczNCBbV29ya2VyLTIyMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE5IDE3OjUxOjUzLDE4OCBbV29ya2VyLTIyNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE5IDE3OjUxOjUzLDQyMCBbV29ya2VyLTIyNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTkgMTc6NTE6NTMsNDIwIFtXb3JrZXItMjI0OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE5IDE3OjUyOjI4LDU3OSBbV29ya2VyLTIyNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTE5IDE3OjUyOjI4LDU4MSBbV29ya2VyLTIyNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMTkgMTc6NTI6NTIsOTQ2IFtXb3JrZXItMjI0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0xOSAxNzo1Mjo1Miw5NDcgW1dvcmtlci0yMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0xOSAxODowMjo0MCw5NzkgW1dvcmtlci0yMjQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTE5IDE4OjAyOjQwLDk3OSBbV29ya2VyLTIyNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTE5IDE4OjAzOjQyLDk1MyBbV29ya2VyLTIyMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMTkgMTg6MDM6NDIsOTUzIFtXb3JrZXItMjIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMTkgMTg6MDY6NTAsMTM0IFtXb3JrZXItMjIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0xOSAxODowNjo1MCwxMzQgW1dvcmtlci0yMjI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMCAxMToyMzozOSw1MDQgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0yMCAxMTozMjoyNCwyMjMgW1dvcmtlci0xMjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIwIDExOjMyOjI0LDI2OCBbV29ya2VyLTEyOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMCAxMjoxMToxMiw0MjYgW1dvcmtlci0xNTogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTIwIDEyOjE3OjEyLDM5OSBbV29ya2VyLTIyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMCAxMjoxNzoxMiw0MDEgW1dvcmtlci0yMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIwIDIwOjI5OjA3LDk1OCBbV29ya2VyLTEwODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjAgMjA6Mjk6MDgsMDA2IFtXb3JrZXItMTA4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjAgMjA6Mzg6MTksNzI3IFtXb3JrZXItMTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMCAyMDozODoxOSw3MjcgW1dvcmtlci0xMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMSAwOToyNzoyOCw1MDUgW1dvcmtlci0zMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIxIDA5OjI3OjI4LDUwOSBbV29ya2VyLTMyNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDA5OjIwOjQyLDM3OCBbV29ya2VyLTY0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMDk6MjA6NDIsNDMxIFtXb3JrZXItNjQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMDk6MjY6MzcsNzUzIFtXb3JrZXItNjYxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAwOToyNjozNyw3NTMgW1dvcmtlci02NjE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAwOToyOTo0Miw4MTggW1dvcmtlci02NDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDA5OjI5OjQyLDgxOCBbV29ya2VyLTY0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDA5OjMyOjM4LDgwNiBbV29ya2VyLTY2MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMDk6MzI6MzgsODA3IFtXb3JrZXItNjYwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMDk6NDg6NDQsMDYxIFtXb3JrZXItNjU5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAwOTo0ODo0NCwxMDUgW1dvcmtlci02NTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAwOTo1NjozMSwzNjcgW1dvcmtlci02Njg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDA5OjU2OjMxLDM2OCBbV29ya2VyLTY2ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDEwOjAxOjU3LDIzNiBbV29ya2VyLTY0NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMTA6MDE6NTcsMjM2IFtXb3JrZXItNjQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjIgMTA6NTE6NTQsOTEwIFtXb3JrZXItNjY5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxMDo1MTo1NCw5MTIgW1dvcmtlci02Njk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAxMTozNTo0MSw0MDQgW1dvcmtlci05OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0yMiAxMjoxNTowMiwzOTEgW1dvcmtlci0xNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTIyIDEyOjE3OjAwLDQwMSBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxMjoxNzowMCw0MTUgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE3OjQ2OjUyLDg3NCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxNzo0Njo1Miw5MDggW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE3OjU0OjEyLDU2MCBbV29ya2VyLTY1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxNzo1NDoxMiw1NjEgW1dvcmtlci02NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE4OjUyOjIzLDMwMyBbV29ya2VyLTc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxODo1MjoyMywzNDUgW1dvcmtlci03NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE4OjU2OjU2LDE2MSBbV29ya2VyLTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxODo1Njo1NiwxNjIgW1dvcmtlci03NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE5OjE5OjQzLDM4MSBbV29ya2VyLTc5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxOToxOTo0MywzODEgW1dvcmtlci03OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE5OjI2OjA1LDY4MiBbV29ya2VyLTgwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxOToyNjowNSw2ODIgW1dvcmtlci04MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE5OjI3OjUzLDkwMiBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxOToyNzo1Myw5MDMgW1dvcmtlci03ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE5OjUwOjI4LDcwMSBbV29ya2VyLTc3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMiAxOTo1MDoyOCw3MDIgW1dvcmtlci03NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDE5OjU4OjA0LDcwNyBbV29ya2VyLTA6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTEwLTIyIDIwOjExOjUwLDUwNSBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIyIDIwOjExOjUwLDUxMCBbV29ya2VyLTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMDoyMzo0MCw4MjMgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjIgMjA6MjM6NDAsODIzIFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMDo0MTozMiw1NzYgW1dvcmtlci0xNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIyIDIwOjQxOjMyLDU4NSBbV29ya2VyLTE0OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMiAyMDo0MTozMiw1ODYgW1dvcmtlci0xNDogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMiAyMTowMTowOCwyNzMgW1dvcmtlci0xNDogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTIyIDIxOjA4OjM3LDU5OSBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTIyIDIxOjA4OjM3LDYwMCBbV29ya2VyLTE0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDIxOjEwOjI4LDE5NSBbV29ya2VyLTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMiAyMToxMDoyOCwxOTUgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIyIDIxOjExOjAzLDc5MiBbV29ya2VyLTE4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMiAyMToxMjowMyw5MTggW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMiAyMToxMjowMyw5MTggW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMToxMjo0OSwxOTkgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMiAyMToxMjo0OSwxOTkgW1dvcmtlci0xODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMToxMzozNiwyNjAgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjIgMjE6MTM6MzYsMjYxIFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMiAyMTozMToxMCw0NTcgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjIgMjE6MzE6MTAsNDU4IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwNzo1MjozNiw4NzYgW1dvcmtlci0xODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMTAtMjMgMDc6NTI6MzYsODc4IFtXb3JrZXItMTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA3OjUyOjU5LDExMCBbV29ya2VyLTE4MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMDc6NTI6NTksMTExIFtXb3JrZXItMTgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDg6MTg6MTYsMTQ1IFtXb3JrZXItMTg5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwODoxODoxNiwxNDYgW1dvcmtlci0xODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwODoyNjo1NCw5MzYgW1dvcmtlci0xODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjMgMDg6MjY6NTQsOTM3IFtXb3JrZXItMTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA4OjMzOjEwLDQ5OCBbV29ya2VyLTE4NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMDg6MzM6MTAsNDk5IFtXb3JrZXItMTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDg6NDU6NDMsNzExIFtXb3JrZXItMTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwODo0NTo0Myw3MTEgW1dvcmtlci0xODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwODo1OToyMiwyMjIgW1dvcmtlci0xOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDA4OjU5OjIyLDIyMyBbV29ya2VyLTE5MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA5OjAwOjU2LDQwMiBbV29ya2VyLTE5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMyAwOTowMDo1Niw0MDMgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDk6MDE6MTEsODYzIFtXb3JrZXItMTk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwOTowMToxMSw4NjMgW1dvcmtlci0xOTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwOToxODo0OSw0MDIgW1dvcmtlci0xOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDA5OjE4OjQ5LDQwMiBbV29ya2VyLTE5NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA5OjE5OjQwLDgzNSBbV29ya2VyLTE5ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMyAwOToxOTo0MCw4MzUgW1dvcmtlci0xOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDk6MjE6MDgsMTQyIFtXb3JrZXItMTkxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTIzIDA5OjIxOjA4LDE0MyBbV29ya2VyLTE5MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwOToyMToyMyw3NDAgW1dvcmtlci0xOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDA5OjIxOjIzLDc0MCBbV29ya2VyLTE5ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDA5OjI1OjQ0LDA2NiBbV29ya2VyLTE5OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMyAwOToyNTo0NCwwNjcgW1dvcmtlci0xOTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMDk6MjU6NTksMDU2IFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAwOToyNTo1OSwwNTYgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAwOTozNDoxMSwzMzEgW1dvcmtlci0xOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDA5OjM0OjExLDMzMSBbV29ya2VyLTE5MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDEwOjA2OjE2LDAxMCBbV29ya2VyLTE5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMyAxMDowNjoxNiwwMTEgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTA6MDY6MjksOTU1IFtXb3JrZXItMTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxMDowNjoyOSw5NTUgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxMDowNjo0NiwxNjEgW1dvcmtlci0yMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDEwOjA2OjQ2LDE2MSBbV29ya2VyLTIwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDEwOjExOjQ5LDQ2MCBbV29ya2VyLTE5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yMyAxMDoxMTo0OSw0NjAgW1dvcmtlci0xOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTA6MTI6MDUsODI2IFtXb3JrZXItMjA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yMyAxMDoxMjowNSw4MjYgW1dvcmtlci0yMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxMDoxOTowMCw5NzkgW1dvcmtlci0yMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDEwOjE5OjAwLDk4MCBbV29ya2VyLTIxMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDEwOjI3OjI4LDc3NyBbV29ya2VyLTIxMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTA6Mjc6MjgsNzc3IFtXb3JrZXItMjEzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTI6Mzg6NDIsNjE5IFtXb3JrZXItMjIwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxMjozODo0Miw2MjAgW1dvcmtlci0yMjA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxNTowNTowOSw5ODAgW1dvcmtlci0yMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yMyAxNTowNTowOSw5ODEgW1dvcmtlci0yMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE1OjE3OjMwLDc2NyBbV29ya2VyLTI0MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTU6MTc6MzAsNzY4IFtXb3JrZXItMjQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTU6Mzg6NDAsODQyIFtXb3JrZXItMjQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxNTozODo0MCw4NDMgW1dvcmtlci0yNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxNTo0MjoxNiwxMTAgW1dvcmtlci0yNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE1OjQyOjE2LDExMCBbV29ya2VyLTI0NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE1OjUwOjQ3LDUwOCBbV29ya2VyLTI1MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTU6NTA6NDcsNTA5IFtXb3JrZXItMjUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTk6MDE6MjQsODIyIFtXb3JrZXItMjkwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTowMToyNCw4MjMgW1dvcmtlci0yOTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxOTowMzozNywxNDggW1dvcmtlci0yODk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjAzOjM3LDE0OCBbV29ya2VyLTI4OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE5OjI5OjM3LDQ5OSBbV29ya2VyLTI5NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6Mjk6MzcsNTAwIFtXb3JrZXItMjk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMTk6MzM6MjEsODQ3IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzoyMSw4NTAgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzoyMSw4NTYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjIxLDg1OSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjIzLDkyMSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MjMsOTIzIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzoyMyw5MjkgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjIzLDkzMiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzAsNzc3IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOkdsZW1tU2VydmljZXM6MC4yLVRlc3QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0xMC0yMyAxOTozMzozMSwwMDAgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzEsMDAyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzEsODY5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjMxLDg3MSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM2LDM3MCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MzYsMzcyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjM2LDM3NiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MzYsMzc5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjM2LDc3MyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRccG9tLnhtbC4KKzIwMjEtMTAtMjMgMTk6MzM6MzYsOTE5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzYsOTIwIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM3LDE0OCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5lY2xpcHNlLm0yZS5qZHQuSmFyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp0ZXN0czowLjEgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xwb20ueG1sLgorMjAyMS0xMC0yMyAxOTozMzozNywzNjMgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozNywzNjUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzcsMzY3IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC93Zm9ybVNlcnZpY2VKYXI6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZUphcjowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvd2Zvcm1TZXJ2aWNlSmFyL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM3LDQ4MCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkubC5MaWZlY3ljbGVNYXBwaW5nRmFjdG9yeSAtIFVzaW5nIG9yZy5tYXZlbi5pZGUuZWNsaXBzZS53dHAuV2FyTGlmZWN5Y2xlTWFwcGluZyBsaWZlY3ljbGUgbWFwcGluZyBmb3IgTWF2ZW5Qcm9qZWN0OiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VzOjAuMS1TTkFQU0hPVCBAIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHBvbS54bWwuCisyMDIxLTEwLTIzIDE5OjMzOjM3LDQ5MCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozNyw0OTIgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozNyw5MDggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzcsOTEwIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzksMDE2IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzozOSwwMTggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDAyMSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MzksMDIyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTozMzozOSwxNzYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjMzOjM5LDIwMSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDIwMyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6MzM6MzksMjI3IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzksNzczIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5sLkxpZmVjeWNsZU1hcHBpbmdGYWN0b3J5IC0gVXNpbmcgb3JnLm1hdmVuLmlkZS5lY2xpcHNlLnd0cC5XYXJMaWZlY3ljbGVNYXBwaW5nIGxpZmVjeWNsZSBtYXBwaW5nIGZvciBNYXZlblByb2plY3Q6IGRlLmtvcmFwLnNlcnZpY2VzOndmb3JtU2VydmljZXM6MC4yLVRlc3QgQCBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xwb20ueG1sLgorMjAyMS0xMC0yMyAxOTozMzozOSw5MTggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzksOTIxIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6MzksOTI0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDk3NCBbV29ya2VyLTI5NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzozOSw5NzYgW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjM5LDk3OCBbV29ya2VyLTI5NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsMDU3IFtXb3JrZXItMjk3OiBEb3dubG9hZCBzb3VyY2VzIGFuZCBqYXZhZG9jXSBFUlJPUiBvLmUubS5qLmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiAtIENvdWxkIG5vdCBkb3dubG9hZCBzb3VyY2VzIGZvciBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4xLVNOQVBTSE9UCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjogQ291bGQgbm90IHJlc29sdmUgYXJ0aWZhY3QgZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50Omphcjpzb3VyY2VzOjAuMS1TTkFQU0hPVAorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6Nzc2KSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbCQ1LmNhbGwoTWF2ZW5JbXBsLmphdmE6MSkgfltvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZUJhcmUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTc3KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6MTEyKSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoTWF2ZW5FeGVjdXRpb25Db250ZXh0LmphdmE6OTkpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3NDMpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkltcGwucmVzb2x2ZShNYXZlbkltcGwuamF2YTo3MjApIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZChEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNzkpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkQXR0YWNobWVudHMoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjU0KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5kb3dubG9hZE1hdmVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjIyMSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IucnVuKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjE2MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEzNykgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IkMS5jYWxsKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjEpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNTEpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5leGVjdXRlKE1hdmVuSW1wbC5qYXZhOjEzNTUpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM1KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorMjAyMS0xMC0yMyAxOTozMzo0MCwwNzUgW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDA3NiBbV29ya2VyLTI5NzogRG93bmxvYWQgc291cmNlcyBhbmQgamF2YWRvY10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwwNzYgW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDA5MiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjMzOjQwLDA5MyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwwOTcgW1dvcmtlci0yOTc6IERvd25sb2FkIHNvdXJjZXMgYW5kIGphdmFkb2NdIEVSUk9SIG8uZS5tLmouaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iIC0gQ291bGQgbm90IGRvd25sb2FkIGphdmFkb2MgZm9yIGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjEtU05BUFNIT1QKK29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOiBDb3VsZCBub3QgcmVzb2x2ZSBhcnRpZmFjdCBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6amFyOmphdmFkb2M6MC4xLVNOQVBTSE9UCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YTo3NzYpIH5bb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsJDUuY2FsbChNYXZlbkltcGwuamF2YToxKSB+W29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlQmFyZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxNzcpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YToxMTIpIFtvcmcuZWNsaXBzZS5tMmUuY29yZV8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuY29yZS5pbnRlcm5hbC5lbWJlZGRlci5NYXZlbkV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShNYXZlbkV4ZWN1dGlvbkNvbnRleHQuamF2YTo5OSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjc0MykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuSW1wbC5yZXNvbHZlKE1hdmVuSW1wbC5qYXZhOjcyMCkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkKERvd25sb2FkU291cmNlc0pvYi5qYXZhOjI3OSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmpkdC5pbnRlcm5hbC5Eb3dubG9hZFNvdXJjZXNKb2IuZG93bmxvYWRBdHRhY2htZW50cyhEb3dubG9hZFNvdXJjZXNKb2IuamF2YToyNjUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLmRvd25sb2FkTWF2ZW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MjIxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYi5ydW4oRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTYxKSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MTM3KSBbb3JnLmVjbGlwc2UubTJlLmpkdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5tMmUuamR0LmludGVybmFsLkRvd25sb2FkU291cmNlc0pvYiQxLmNhbGwoRG93bmxvYWRTb3VyY2VzSm9iLmphdmE6MSkgW29yZy5lY2xpcHNlLm0yZS5qZHRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5FeGVjdXRpb25Db250ZXh0LmV4ZWN1dGVCYXJlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE3NykgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjE1MSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5jb3JlLmludGVybmFsLmVtYmVkZGVyLk1hdmVuRXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKE1hdmVuRXhlY3V0aW9uQ29udGV4dC5qYXZhOjk5KSBbb3JnLmVjbGlwc2UubTJlLmNvcmVfMS45LjAuMjAxODA2MDYtMjAzNi5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UubTJlLmNvcmUuaW50ZXJuYWwuZW1iZWRkZXIuTWF2ZW5JbXBsLmV4ZWN1dGUoTWF2ZW5JbXBsLmphdmE6MTM1NSkgW29yZy5lY2xpcHNlLm0yZS5jb3JlXzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLm0yZS5qZHQuaW50ZXJuYWwuRG93bmxvYWRTb3VyY2VzSm9iLnJ1bihEb3dubG9hZFNvdXJjZXNKb2IuamF2YToxMzUpIFtvcmcuZWNsaXBzZS5tMmUuamR0XzEuOS4wLjIwMTgwNjA2LTIwMzYuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCisyMDIxLTEwLTIzIDE5OjMzOjQwLDMxNCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwzMTUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTozMzo0MCwzMTUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsODU5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzo0MCw4NjEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsODYyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzo0MCw4NjQgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsOTcwIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzo0MCw5NzEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzM6NDAsOTczIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTozMzo0MCw5NzQgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcUHJvamVjdC1UZXN0c1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6MzQ6MDYsMjUzIFtXb3JrZXItMjk4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTozNDowNiwyNTMgW1dvcmtlci0yOTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yMyAxOTo0OTo0Miw0NjAgW1dvcmtlci0yOTg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDIsNDYzIFtXb3JrZXItMjk4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDIsNDgyIFtXb3JrZXItMjk4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3IgR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yMyAxOTo0OTo0MywwNjkgW1dvcmtlci0yOTg6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsMDcxIFtXb3JrZXItMjk4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsMDcxIFtXb3JrZXItMjk4OiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDA4NyBbV29ya2VyLTI5ODogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIHdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsNDAyIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0Myw0MDUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw0MDggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDQxMSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2Vcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDYwMiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDMsNjA0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0Myw2MjEgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDYyNCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsODg0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDg4NiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDkxNSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDMsOTE4IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDkyMiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDMsOTI0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQzLDkyNSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDaGFuZ2VkIHJlc291cmNlcyByZXF1aXJlIGEgY29tcGxldGUgY2xlYW4gb2YgZmlsdGVyZWQgcmVzb3VyY2VzIG9mIEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDMsOTI3IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDQsMDMzIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0NiwwNjUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwwNjYgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMDczIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yMyAxOTo0OTo0NiwwNzUgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnRcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDA3NyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMDc5IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwxNzggW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDE3OSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VKYXJcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDE4MSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMTgzIFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphclxzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsMjk2IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDI5NyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDI5NyBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwzMDMgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDMwNSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwzMDcgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDMwOCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0NiwzMDkgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDMwOSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciB3Zm9ybVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDMxNiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjMgMTk6NDk6NDYsNDY0IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjMgMTk6NDk6NDYsNDY1IFtXb3JrZXItMjk1OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDQ2NiBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yMyAxOTo0OTo0Niw0NzQgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDQ3NSBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo0Niw0ODIgW1dvcmtlci0yOTU6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTIzIDE5OjQ5OjQ2LDQ5NCBbV29ya2VyLTI5NTogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yMyAxOTo0OTo1NSwxNjggW1dvcmtlci0yOTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDE5OjQ5OjU1LDE2OSBbV29ya2VyLTI5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDE5OjU4OjUyLDAyMCBbV29ya2VyLTI5NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMTk6NTg6NTIsMDIwIFtXb3JrZXItMjk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjMgMjA6MTQ6MjcsOTEyIFtXb3JrZXItNDogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyBvdXQtb2YtZGF0ZS4gVHJ5aW5nIHRvIHVwZGF0ZS4KKzIwMjEtMTAtMjMgMjA6MTY6MjQsNTQzIFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjMgMjA6MTY6MjQsNTQ2IFtXb3JrZXItMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTIzIDIwOjE2OjU4LDEyOCBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTIzIDIwOjE2OjU4LDEyOSBbV29ya2VyLTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNSAwOTozODoxMiwzNzIgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0yNSAxOTowMzozMiw1ODUgW1dvcmtlci0xMjc6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yNSAxOToxNjoxMiw2NzkgW1dvcmtlci0xMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI1IDE5OjE2OjEyLDY4MSBbV29ya2VyLTEyNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI1IDE5OjM0OjQ3LDIxNCBbV29ya2VyLTEzMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjUgMTk6MzQ6NDcsMjE0IFtXb3JrZXItMTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjUgMTk6NDM6MTgsNTYxIFtXb3JrZXItMTMxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNSAxOTo0MzoxOCw1NjIgW1dvcmtlci0xMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNSAxOTo1MToxMywzODEgW1dvcmtlci0xMzE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI1IDE5OjUxOjEzLDM4MSBbV29ya2VyLTEzMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA3OjIxOjQyLDI4NiBbV29ya2VyLTQ6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgdXAtdG8tZGF0ZS4gVHJ5aW5nIHRvIHJlYWQuCisyMDIxLTEwLTI2IDA3OjI3OjQwLDQ0MiBbV29ya2VyLTExOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMjYgMDc6Mzc6MjMsNTY5IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMDc6Mzc6MjMsNTg5IFtXb3JrZXItODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA3OjM5OjIwLDkyNyBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAwNzozOToyMCw5MjcgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA3OjU4OjU5LDI3NiBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDA3OjU4OjU5LDI3NiBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAwNzo1ODo1OSwyNzYgW1dvcmtlci0yOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIFdBUk4gIG8uZS5tLmkubC5NYXZlbkxhdW5jaEV4dGVuc2lvbnNTdXBwb3J0IC0gVW5rbm93biBvciB1bnN1cHBvcnRlZCBzb3VyY2UgbG9jYXRvciBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwubGF1bmNoaW5nLnNvdXJjZWxvb2t1cC5hZHZhbmNlZC5BZHZhbmNlZFNvdXJjZUxvb2t1cERpcmVjdG9yCisyMDIxLTEwLTI2IDA4OjA5OjUxLDc2OSBbV29ya2VyLTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAwODowOTo1MSw3NzAgW1dvcmtlci0xMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA4OjIzOjM4LDU3MyBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAwODoyMzozOCw1NzMgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjEzOjAwLDI0MyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDA5OjEzOjAwLDI0NCBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjEzOjU5LDk0MyBbV29ya2VyLTIzOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMDk6MTM6NTksOTc0IFtXb3JrZXItMjM6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDA5OjE0OjUwLDQ2OSBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDA5OjE0OjUwLDQ2OSBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjE2OjQ1LDE2NiBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDA5OjE2OjQ1LDE2NiBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjE3OjQxLDYwMiBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDA5OjE3OjQxLDYwMyBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjE4OjQ4LDgwNyBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAwOToxODo0OCw4MDcgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjI2OjI4LDQ4OCBbV29ya2VyLTIzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAwOToyNjoyOCw0ODkgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDA5OjI3OjQ2LDY0MSBbV29ya2VyLTI2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAwOToyNzo0Niw2NDIgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDExOjMwOjQ4LDA3MiBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMTozMDo0OCwwNzMgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDExOjMxOjMxLDUxOSBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMTozMTozMSw1MTkgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDExOjQ0OjEzLDI4NiBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI2IDExOjQ0OjEzLDI4NiBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjQ5OjAyLDY3OCBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI2IDEyOjQ5OjAyLDY4MCBbV29ya2VyLTUxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjQ5OjE4LDQ4NyBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMjo0OToxOCw0ODggW1dvcmtlci00NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjQ5OjM5LDU0OSBbV29ya2VyLTUwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxMjo0OTozOSw1NDkgW1dvcmtlci01MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDEyOjUxOjI1LDA2MyBbV29ya2VyLTQ4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTI6NTE6MjUsMDcyIFtXb3JrZXItNDg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDEyOjUxOjI1LDA3MyBbV29ya2VyLTQ4OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTI6NTE6NDcsNjUxIFtXb3JrZXItNTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNiAxMjo1MTo0Nyw2NTEgW1dvcmtlci01MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTI6NTI6MDQsMzAwIFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDEyOjUyOjA0LDMwMCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTI6NTY6MzYsODEzIFtXb3JrZXItNDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDEyOjU2OjM2LDgxNCBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTI6NTY6NTUsNzU5IFtXb3JrZXItNDg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDEyOjU2OjU1LDc2MCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MDE6MDksNzUxIFtXb3JrZXItNzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjYgMTU6MDE6MDksNzU0IFtXb3JrZXItNzc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MDE6MjYsMDA4IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNiAxNTowMToyNiwwMDggW1dvcmtlci03NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MDE6NDUsMjA5IFtXb3JrZXItNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMTAtMjYgMTU6MDE6NDUsMjA5IFtXb3JrZXItNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MDI6MTksMzE5IFtXb3JrZXItNzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjAyOjE5LDMxOSBbV29ya2VyLTc1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MDI6MzYsNjI5IFtXb3JrZXItNzg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjAyOjM2LDYyOSBbV29ya2VyLTc4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTU6MjA6NDYsODgxIFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo0Niw4ODIgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo0OCw1OTkgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBDbGVhbmluZyBmaWx0ZXJlZCBmb2xkZXIgZm9yIEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MjA6NDksNTA0IFtXb3JrZXItODE6IENsZWFuaW5nIGFsbCBwcm9qZWN0c10gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo0OSw1MDYgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo0OSw1MDkgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvd2Zvcm1TZXJ2aWNlSmFyOiBkZS5rb3JhcC5zZXJ2aWNlczp3Zm9ybVNlcnZpY2VKYXI6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3dmb3JtU2VydmljZUphci90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo1MCwwODcgW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo1MCwwODggW1dvcmtlci04MTogQ2xlYW5pbmcgYWxsIHByb2plY3RzXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIwOjUwLDA4OSBbV29ya2VyLTgxOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIwOjUwLDA5NiBbV29ya2VyLTgxOiBDbGVhbmluZyBhbGwgcHJvamVjdHNdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENsZWFuaW5nIGZpbHRlcmVkIGZvbGRlciBmb3Igd2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNToyMDo1Myw2MzIgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjA6NTMsNjM1IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMDo1Myw2MzggW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjA6NTMsNjQwIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMDo1NSwyODQgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjA6NTUsMjg3IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIwOjU1LDI5MSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMDo1NSwyOTMgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlsc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTUsNzY2IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTUsNzY4IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMDo1NSw3NzggW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjA6NTUsNzgxIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlc1xzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjA6NTUsNzg1IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIwOjU1LDc4NyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXNcc3JjXHRlc3RccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIwOjU1LDc4OSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIENoYW5nZWQgcmVzb3VyY2VzIHJlcXVpcmUgYSBjb21wbGV0ZSBjbGVhbiBvZiBmaWx0ZXJlZCByZXNvdXJjZXMgb2YgR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNToyMDo1NSw3OTEgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS53LmkuZi5SZXNvdXJjZUZpbHRlcmluZ0J1aWxkUGFydGljaXBhbnQgLSBFeGVjdXRpbmcgcmVzb3VyY2UgZmlsdGVyaW5nIGZvciBHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjIwOjU2LDE5NyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMSw1OTIgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAxLDU5MiBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAxLDYwNyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMSw2MTAgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudFxzcmNcbWFpblxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDEsNjEzIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIxOjAxLDY1OSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50XHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMTowMSw4NDIgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDEsODQ0IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMTowMSw4NDggW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDEsODUxIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMTowMiwyMDIgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yNiAxNToyMTowMiwyMDUgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDIwNSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9HbGVtbUNsaWVudDogZGUua29yYXAuc2VydmljZXMuZ2xlbW0uY2xpZW50OkdsZW1tQ2xpZW50OjAuMi1UZXN0IHdpdGggY2xhc3NpZmllciAgdG8gL0dsZW1tQ2xpZW50L3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDIxNiBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMiwyNDcgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzXHNyY1xtYWluXHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMTowMiwyNTAgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBXQVJOICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIFVzaW5nIHBsYXRmb3JtIGVuY29kaW5nIChDcDEyNTIgYWN0dWFsbHkpIHRvIGNvcHkgZmlsdGVyZWQgcmVzb3VyY2VzLCBpLmUuIGJ1aWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudCEKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjUyIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBza2lwIG5vbiBleGlzdGluZyByZXNvdXJjZURpcmVjdG9yeSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlc1xzcmNcdGVzdFxyZXNvdXJjZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjUzIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0udy5pLmYuUmVzb3VyY2VGaWx0ZXJpbmdCdWlsZFBhcnRpY2lwYW50IC0gQ2hhbmdlZCByZXNvdXJjZXMgcmVxdWlyZSBhIGNvbXBsZXRlIGNsZWFuIG9mIGZpbHRlcmVkIHJlc291cmNlcyBvZiB3Zm9ybVNlcnZpY2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDI1MyBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLncuaS5mLlJlc291cmNlRmlsdGVyaW5nQnVpbGRQYXJ0aWNpcGFudCAtIEV4ZWN1dGluZyByZXNvdXJjZSBmaWx0ZXJpbmcgZm9yIHdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsMjY1IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIxOjAyLDUzOSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsNTQwIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsNTQyIFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3dmb3JtU2VydmljZUphcjogZGUua29yYXAuc2VydmljZXM6d2Zvcm1TZXJ2aWNlSmFyOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC93Zm9ybVNlcnZpY2VKYXIvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjYgMTU6MjE6MDIsNTU3IFtXb3JrZXItODQ6IEJ1aWxkaW5nIFdvcmtzcGFjZV0gV0FSTiAgby5lLm0uYy5pLmVtYmVkZGVyLkVjbGlwc2VMb2dnZXIgLSBVc2luZyBwbGF0Zm9ybSBlbmNvZGluZyAoQ3AxMjUyIGFjdHVhbGx5KSB0byBjb3B5IGZpbHRlcmVkIHJlc291cmNlcywgaS5lLiBidWlsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQhCisyMDIxLTEwLTI2IDE1OjIxOjAyLDU2MCBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIElORk8gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gc2tpcCBub24gZXhpc3RpbmcgcmVzb3VyY2VEaXJlY3RvcnkgQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFByb2plY3QtVGVzdHNcc3JjXG1haW5ccmVzb3VyY2VzCisyMDIxLTEwLTI2IDE1OjIxOjAyLDU2OSBbV29ya2VyLTg0OiBCdWlsZGluZyBXb3Jrc3BhY2VdIFdBUk4gIG8uZS5tLmMuaS5lbWJlZGRlci5FY2xpcHNlTG9nZ2VyIC0gVXNpbmcgcGxhdGZvcm0gZW5jb2RpbmcgKENwMTI1MiBhY3R1YWxseSkgdG8gY29weSBmaWx0ZXJlZCByZXNvdXJjZXMsIGkuZS4gYnVpbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50IQorMjAyMS0xMC0yNiAxNToyMTowMiw1NzEgW1dvcmtlci04NDogQnVpbGRpbmcgV29ya3NwYWNlXSBJTkZPICBvLmUubS5jLmkuZW1iZWRkZXIuRWNsaXBzZUxvZ2dlciAtIHNraXAgbm9uIGV4aXN0aW5nIHJlc291cmNlRGlyZWN0b3J5IEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxQcm9qZWN0LVRlc3RzXHNyY1x0ZXN0XHJlc291cmNlcworMjAyMS0xMC0yNiAxNToyMToxMywzODQgW1dvcmtlci03NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yNiAxNToyMToxMywzODQgW1dvcmtlci03NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNToyMTozMywwMzEgW1dvcmtlci04MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlCisyMDIxLTEwLTI2IDE1OjIxOjMzLDAzMSBbV29ya2VyLTgxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNToyMTo0OSwyMDggW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxVdGlscworMjAyMS0xMC0yNiAxNToyMTo0OSwyMDggW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNToyMjowMiw4MzggW1dvcmtlci04MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlSmFyCisyMDIxLTEwLTI2IDE1OjIyOjAyLDgzOSBbV29ya2VyLTgzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZUphcl0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNToyMjoxOSwyNzMgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MjI6MTksMjczIFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNToyMjozMiw3MzEgW1dvcmtlci04MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MjI6MzIsNzMyIFtXb3JrZXItODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNTozMjoxMSw0MzcgW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTU6MzI6MTEsNDM3IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjowNToyNiw1MjMgW1dvcmtlci05MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6MDU6MjYsNTI0IFtXb3JrZXItOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjoyNDowOSw3MjIgW1dvcmtlci05NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6MjQ6MDksNzIzIFtXb3JrZXItOTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjoyOTo1MCwyODUgW1dvcmtlci05NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6Mjk6NTAsMjg1IFtXb3JrZXItOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjozMTo0OSw4MTEgW1dvcmtlci0xMDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMTAtMjYgMTY6MzE6NDksODExIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjMyOjA0LDA5NyBbV29ya2VyLTk1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNjozMjowNCwwOTggW1dvcmtlci05NTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjMyOjE4LDUyMyBbV29ya2VyLTk5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNjozMjoxOCw1MjQgW1dvcmtlci05OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjM2OjAwLDA5NCBbV29ya2VyLTk5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNjozNjowMCwwOTUgW1dvcmtlci05OTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjM5OjAzLDIxOSBbV29ya2VyLTEwNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6Mzk6MDMsMjE5IFtXb3JrZXItMTA2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6NDY6MzIsMDMzIFtXb3JrZXItMTAwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1V0aWxzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFV0aWxzCisyMDIxLTEwLTI2IDE2OjQ2OjMyLDAzMyBbV29ya2VyLTEwMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9VdGlsc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNjo0Njo0Nyw2NTYgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI2IDE2OjQ2OjQ3LDY1NiBbV29ya2VyLTEwNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI2IDE2OjQ3OjAwLDg2NCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjYgMTY6NDc6MDAsODY1IFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTY6NDk6NDIsOTMwIFtXb3JrZXItMTA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNjo0OTo0Miw5MzAgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNzozOToyNyw4MzAgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0yNiAxNzo0Njo1NSw0MTQgW1dvcmtlci0xMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTc6NDY6NTUsNDE4IFtXb3JrZXItMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxNzo1NjoyMCw4NzIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNiAxNzo1NjoyMCw4NzIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjYgMTg6MjU6NDQsOTExIFtXb3JrZXItMTc6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yNiAxODozMDo0Nyw0NzggW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTg6MzA6NDcsNDc5IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAxODozMjoyNCwzNDEgW1dvcmtlci0xNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMTg6MzI6MjQsMzQzIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAyMDoxNjo0NSwyNjMgW1dvcmtlci0xOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMjA6MTY6NDUsMjY0IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAyMDoyNTo0Nyw1OTUgW1dvcmtlci0yNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMjA6MjU6NDcsNTk1IFtXb3JrZXItMjY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAyMDozNDo0NSwwMzUgW1dvcmtlci0yMzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMjA6MzQ6NDUsMDM1IFtXb3JrZXItMjM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAyMDozNzoyNCw4ODAgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMjA6Mzc6MjQsODgwIFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNiAyMDozODo0OCwxMTYgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjYgMjA6Mzg6NDgsMTE2IFtXb3JrZXItMjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwODoyOTowNSw2MjggW1dvcmtlci0wOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0yNyAwODozOTozMSw4OTcgW1dvcmtlci0zOiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMjcgMDg6NTA6NDksMjA0IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAwODo1MDo0OSwyMDYgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDg6NTE6MDcsNTA2IFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI3IDA4OjUxOjA3LDUwNyBbV29ya2VyLTE3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDg6NTQ6MjIsMzY0IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMDg6NTQ6MjIsMzY1IFtXb3JrZXItNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA4OjU4OjM1LDAwNiBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAwODo1ODozNSwwMDYgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAwODo1ODo0OSw5OTUgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAwODo1ODo0OSw5OTUgW1dvcmtlci00OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDk6MDg6NTYsODcwIFtXb3JrZXItMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcSnNvblRyYXZlcnNlCisyMDIxLTEwLTI3IDA5OjA4OjU2LDg3MCBbV29ya2VyLTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjA5OjExLDMwNiBbV29ya2VyLTIxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAwOTowOToxMSwzMDYgW1dvcmtlci0yMTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjE2OjU0LDQ0NCBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDk6MTY6NTQsNDQ1IFtXb3JrZXItMjU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjE3OjEwLDIxMiBbV29ya2VyLTI1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAwOToxNzoxMCwyMTIgW1dvcmtlci0yNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjIzOjI3LDAyMiBbV29ya2VyLTI5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDk6MjM6MjcsMDIzIFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjI0OjQwLDQxMiBbV29ya2VyLTI3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDk6MjQ6NDAsNDEzIFtXb3JrZXItMjc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjI0OjU4LDI0MiBbV29ya2VyLTI4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAwOToyNDo1OCwyNDIgW1dvcmtlci0yODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjMzOjQ5LDI0MSBbV29ya2VyLTMwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0pzb25UcmF2ZXJzZV0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxKc29uVHJhdmVyc2UKKzIwMjEtMTAtMjcgMDk6MzM6NDksMjQxIFtXb3JrZXItMzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDA5OjM2OjQ4LDM5MSBbV29ya2VyLTI5OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjcgMDk6MzY6NDgsNDA1IFtXb3JrZXItMjk6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvSnNvblRyYXZlcnNlOiBkZS5rb3JhcC5qc29uOkpzb25UcmF2ZXJzZTowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvSnNvblRyYXZlcnNlL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI3IDA5OjM2OjQ4LDQwNiBbV29ya2VyLTI5OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjcgMDk6NDM6MjgsMjg2IFtXb3JrZXItMzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDA5OjQzOjI4LDI4NiBbV29ya2VyLTM0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDk6NDQ6MjUsMTI2IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjcgMDk6NDQ6MjUsMTI2IFtXb3JrZXItMzM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDk6NDQ6NDEsNzM5IFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAwOTo0NDo0MSw3NDAgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDk6NDQ6NTMsMzI1IFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcVXRpbHMKKzIwMjEtMTAtMjcgMDk6NDQ6NTMsMzI1IFtXb3JrZXItMjk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfVXRpbHNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDk6NDU6MjMsNzEyIFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlSmFyXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZUphcgorMjAyMS0xMC0yNyAwOTo0NToyMyw3MTMgW1dvcmtlci0zNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VKYXJdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMDk6NDU6NDIsNjc5IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDA5OjQ1OjQyLDY4MCBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTA6NTg6MjIsMjAxIFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxMDo1ODoyMiwyMDEgW1dvcmtlci0zOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTA6NTg6NDksMjY2IFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDEwOjU4OjQ5LDI2NiBbV29ya2VyLTM2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTE6MTg6MTksMjQ2IFtXb3JrZXItNDQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxMToxODoxOSwyNDggW1dvcmtlci00NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTE6MTg6MzYsMjY3IFtXb3JrZXItNDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDExOjE4OjM2LDI2NyBbV29ya2VyLTQzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTE6MjI6MTQsMTg3IFtXb3JrZXItMzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxMToyMjoxNCwxODggW1dvcmtlci0zNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTE6MjI6MzAsNTExIFtXb3JrZXItNDY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDExOjIyOjMwLDUxMSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTM6NDk6MzEsNDY5IFtXb3JrZXItNjg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxMzo0OTozMSw0NzAgW1dvcmtlci02ODogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTM6NDk6NDcsNTkxIFtXb3JrZXItNzA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDEzOjQ5OjQ3LDU5MiBbV29ya2VyLTcwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6MDg6NTQsNDk4IFtXb3JrZXItODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxNjowODo1NCw0OTkgW1dvcmtlci04NzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6MDk6MjgsMzYzIFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE2OjA5OjI4LDM2MyBbV29ya2VyLTg0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6MTM6NTIsMTMwIFtXb3JrZXItOTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxNjoxMzo1MiwxMzAgW1dvcmtlci05MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6MTQ6MDYsOTkxIFtXb3JrZXItODc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE2OjE0OjA2LDk5MSBbV29ya2VyLTg3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6MjE6NDUsNDUxIFtXb3JrZXItOTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfSnNvblRyYXZlcnNlXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEpzb25UcmF2ZXJzZQorMjAyMS0xMC0yNyAxNjoyMTo0NSw0NTEgW1dvcmtlci05NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9Kc29uVHJhdmVyc2VdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6MjI6MDAsNzYwIFtXb3JrZXItOTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE2OjIyOjAwLDc2MSBbV29ya2VyLTkzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTY6NTQ6MjQsOTIxIFtXb3JrZXItOTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE2OjU0OjI0LDkyMiBbV29ya2VyLTk3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6MTA6NDIsNTUxIFtXb3JrZXItMTA0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI3IDE4OjEwOjQyLDU1MiBbV29ya2VyLTEwNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoxMToxMCw5MzMgW1dvcmtlci0xMDU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE4OjExOjEwLDkzMyBbV29ya2VyLTEwNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjE1OjA0LDY1OSBbV29ya2VyLTEwMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yNyAxODoxNTowNCw2NTkgW1dvcmtlci0xMDA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6MTU6MTksMDE5IFtXb3JrZXItMTAzOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yNyAxODoxNToxOSwwMjAgW1dvcmtlci0xMDM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoxOToxNiw5NTAgW1dvcmtlci0xMDc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1DbGllbnRdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1DbGllbnQKKzIwMjEtMTAtMjcgMTg6MTk6MTYsOTUwIFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjE5OjMxLDE3NCBbV29ya2VyLTEwNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjcgMTg6MTk6MzEsMTc0IFtXb3JrZXItMTA3OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6MjI6NTIsOTYwIFtXb3JrZXItMTExOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yNyAxODoyMjo1Miw5NjAgW1dvcmtlci0xMTE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoyNDoyNywwMjcgW1dvcmtlci0xMDk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI3IDE4OjI0OjI3LDAyNyBbV29ya2VyLTEwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjI2OjM3LDA2MSBbV29ya2VyLTExMjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjcgMTg6MjY6MzcsMDYxIFtXb3JrZXItMTEyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjcgMTg6Mjg6NTIsMDMxIFtXb3JrZXItMTA5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI3IDE4OjI4OjUyLDAzMSBbV29ya2VyLTEwOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yNyAxODoyOTowNywzODAgW1dvcmtlci0xMTA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI3IDE4OjI5OjA3LDM4MSBbV29ya2VyLTExMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI3IDE4OjI5OjA3LDM4MiBbV29ya2VyLTExMDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBXQVJOICBvLmUubS5pLmwuTWF2ZW5MYXVuY2hFeHRlbnNpb25zU3VwcG9ydCAtIFVua25vd24gb3IgdW5zdXBwb3J0ZWQgc291cmNlIGxvY2F0b3Igb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmxhdW5jaGluZy5zb3VyY2Vsb29rdXAuYWR2YW5jZWQuQWR2YW5jZWRTb3VyY2VMb29rdXBEaXJlY3RvcgorMjAyMS0xMC0yOCAwNzoyMTozOSw3OTkgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMC0yOCAwNzozOToyOSw0NTYgW1dvcmtlci05OiBSZXNvbHZpbmcgbW9kZWwgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjBdIFdBUk4gIG8uZS5yLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkgLSBGYWlsZWQgdG8gZG93bmxvYWQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4Ojp6aXA6MC4wLjAKK29yZy5lY2xpcHNlLmFldGhlci5yZXNvbHV0aW9uLkFydGlmYWN0UmVzb2x1dGlvbkV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQ1MykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3RzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjU1KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjIzMikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0uamF2YTozMDMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZUludGVybmFsKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE5MykgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTcyKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKEVjbGlwc2VNb2RlbFJlcG9zaXRvcnkuamF2YToxNjgpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLmludGVybmFsLm1vZGVscy5yY3AuRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IucnVuKERvd25sb2FkTW9kZWxBcmNoaXZlSm9iLmphdmE6NzYpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLnJjcF8yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UuY29yZS5pbnRlcm5hbC5qb2JzLldvcmtlci5ydW4oV29ya2VyLmphdmE6NjApIFtvcmcuZWNsaXBzZS5jb3JlLmpvYnNfMy4xMC4wLnYyMDE4MDQyNy0xNDU0LmphcjpuYV0KK0NhdXNlZCBieTogb3JnLmVjbGlwc2UuYWV0aGVyLnRyYW5zZmVyLkFydGlmYWN0Tm90Rm91bmRFeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci50cmFuc2ZlckZhaWxlZChBcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLmphdmE6NDgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJFRhc2tSdW5uZXIucnVuKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjM2NCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLnV0aWwuY29uY3VycmVuY3kuUnVubmFibGVFcnJvckZvcndhcmRlciQxLnJ1bihSdW5uYWJsZUVycm9yRm9yd2FyZGVyLmphdmE6NzYpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTo1OTApIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmdldChCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YToyNTgpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnBlcmZvcm1Eb3dubG9hZHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo1MjkpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZShEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjQzMCkgfltuYTpuYV0KKwkuLi4gOCBjb21tb24gZnJhbWVzIG9taXR0ZWQKKzIwMjEtMTAtMjggMDc6NDE6MDAsNDc1IFtXb3JrZXItOTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAwNzo0MTowMCw0NzcgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDA3OjQxOjI2LDQzOSBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTEwLTI4IDA3OjQxOjI2LDQzOSBbV29ya2VyLTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAwOTowNjo1Miw4MTMgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbUNsaWVudAorMjAyMS0xMC0yOCAwOTowNjo1Miw4MTMgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbUNsaWVudF0gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAwOTowNzowNyw5MDUgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjggMDk6MDc6MDcsOTA2IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOCAxMzoxNTo1OSw0NjEgW1dvcmtlci0zOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMC0yOCAxNTo1NDowMSwxODUgW1dvcmtlci0zNzogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTEwLTI4IDE2OjA1OjE1LDI1MyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI4IDE2OjA1OjE1LDI1NiBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjA1OjM1LDEwOCBbV29ya2VyLTQwOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yOCAxNjowNTozNSwxMDkgW1dvcmtlci00MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjQzOjM0LDgyNyBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI4IDE2OjQzOjM0LDgyNyBbV29ya2VyLTQ0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjQzOjUwLDUyOSBbV29ya2VyLTQ2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yOCAxNjo0Mzo1MCw1MjkgW1dvcmtlci00NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjUyOjE1LDY0MyBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI4IDE2OjUyOjE1LDY0MyBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjUyOjMwLDgzMiBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yOCAxNjo1MjozMCw4MzIgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjU1OjE3LDYxNCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI4IDE2OjU1OjE3LDYxNCBbV29ya2VyLTQ4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE2OjU1OjMwLDgzMCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yOCAxNjo1NTozMCw4MzEgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE3OjUwOjM3LDkyNyBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tQ2xpZW50CisyMDIxLTEwLTI4IDE3OjUwOjM3LDkyNyBbV29ya2VyLTQ1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tQ2xpZW50XSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI4IDE3OjUwOjU0LDMxMSBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcV2Zvcm1TZXJ2aWNlcworMjAyMS0xMC0yOCAxNzo1MDo1NCwzMTEgW1dvcmtlci00MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTEwLTI5IDA4OjM2OjQ2LDI0MSBbV29ya2VyLTI6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTEwLTI5IDA5OjMwOjA0LDUxNyBbV29ya2VyLTk6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMC0yOSAwOTozNToyNywwNjcgW1dvcmtlci0xNzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjkgMDk6MzU6MjcsMDcwIFtXb3JrZXItMTc6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAwOTo0MToyOSw1MTIgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMC0yOSAwOTo0MToyOSw1MTMgW1dvcmtlci05OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMDk6NDE6NTAsNTgyIFtXb3JrZXItMTY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTEwLTI5IDA5OjQxOjUwLDU4MiBbV29ya2VyLTE2OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTAtMjkgMTU6MDk6NTMsODU0IFtXb3JrZXItNzI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yOSAxNTowOTo1Myw4NzIgW1dvcmtlci03MjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTAtMjkgMTU6MDk6NTMsODczIFtXb3JrZXItNzI6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvR2xlbW1DbGllbnQ6IGRlLmtvcmFwLnNlcnZpY2VzLmdsZW1tLmNsaWVudDpHbGVtbUNsaWVudDowLjItVGVzdCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9HbGVtbUNsaWVudC90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yOSAxNToyMzozMCw1MTEgW1dvcmtlci04MDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjkgMTU6MjM6MzAsNTExIFtXb3JrZXItODA6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAxNToyMzo1MywzNzggW1dvcmtlci04MTogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC91dGlsczogZGUua29yYXAuc2VydmljZXM6dXRpbHM6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL3V0aWxzL3RhcmdldC9jbGFzc2VzCisyMDIxLTEwLTI5IDE1OjIzOjUzLDM4MSBbV29ya2VyLTgxOiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMC0yOSAxNToyNjoxMiw3NjQgW1dvcmtlci04MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjkgMTU6MjY6MTIsNzY0IFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAxNToyNzowOCwwOTcgW1dvcmtlci04MTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9XZm9ybVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXFdmb3JtU2VydmljZXMKKzIwMjEtMTAtMjkgMTU6Mjc6MDgsMDk3IFtXb3JrZXItODE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAxNTozNjozMSw5NjMgW1dvcmtlci04MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjkgMTU6MzY6MzEsOTY0IFtXb3JrZXItODI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAxNTo0NDowMCwyODggW1dvcmtlci04NDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTAtMjkgMTU6NDQ6MDAsMjg5IFtXb3JrZXItODQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMC0yOSAxNzo1MDoyNCw4NTMgW1dvcmtlci0yOiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIHVwLXRvLWRhdGUuIFRyeWluZyB0byByZWFkLgorMjAyMS0xMS0wMyAwOToxODowOSw0ODkgW1dvcmtlci00OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgorMjAyMS0xMS0wMyAwOToyMzoyNiwyMjMgW1dvcmtlci02OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL3V0aWxzOiBkZS5rb3JhcC5zZXJ2aWNlczp1dGlsczowLjEtU05BUFNIT1Qgd2l0aCBjbGFzc2lmaWVyICB0byAvdXRpbHMvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDMgMDk6MjM6MjYsMjQwIFtXb3JrZXItNjogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDMgMDk6MjQ6NTgsNzUxIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDMgMDk6MjQ6NTgsNzUzIFtXb3JrZXItNjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTAzIDA5OjMwOjA2LDIxNiBbV29ya2VyLTY6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMS0wMyAwOTozMDowNiwyMTkgW1dvcmtlci02OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0pzb25UcmF2ZXJzZTogZGUua29yYXAuanNvbjpKc29uVHJhdmVyc2U6MC4xLVNOQVBTSE9UIHdpdGggY2xhc3NpZmllciAgdG8gL0pzb25UcmF2ZXJzZS90YXJnZXQvY2xhc3NlcworMjAyMS0xMS0wMyAwOTozMDowNiwyMjAgW1dvcmtlci02OiByZWxvYWQgbWF2ZW4gcHJvamVjdF0gSU5GTyAgby5lLm0uYy5pLnAuV29ya3NwYWNlQ2xhc3NpZmllclJlc29sdmVyTWFuYWdlciAtIFJlc29sdmluZyBQL0dsZW1tQ2xpZW50OiBkZS5rb3JhcC5zZXJ2aWNlcy5nbGVtbS5jbGllbnQ6R2xlbW1DbGllbnQ6MC4yLVRlc3Qgd2l0aCBjbGFzc2lmaWVyICB0byAvR2xlbW1DbGllbnQvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDMgMDk6NTY6MDQsNjk1IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfV2Zvcm1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxXZm9ybVNlcnZpY2VzCisyMDIxLTExLTAzIDA5OjU2OjA0LDY5NSBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX1dmb3JtU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMDg6MTU6MjcsMzg4IFtXb3JrZXItOTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTEtMDQgMDg6Mjc6MjAsNjYwIFtXb3JrZXItMTg6IHJlbG9hZCBtYXZlbiBwcm9qZWN0XSBJTkZPICBvLmUubS5jLmkucC5Xb3Jrc3BhY2VDbGFzc2lmaWVyUmVzb2x2ZXJNYW5hZ2VyIC0gUmVzb2x2aW5nIFAvdXRpbHM6IGRlLmtvcmFwLnNlcnZpY2VzOnV0aWxzOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC91dGlscy90YXJnZXQvY2xhc3NlcworMjAyMS0xMS0wNCAwODoyNzoyMCw2ODAgW1dvcmtlci0xODogcmVsb2FkIG1hdmVuIHByb2plY3RdIElORk8gIG8uZS5tLmMuaS5wLldvcmtzcGFjZUNsYXNzaWZpZXJSZXNvbHZlck1hbmFnZXIgLSBSZXNvbHZpbmcgUC9Kc29uVHJhdmVyc2U6IGRlLmtvcmFwLmpzb246SnNvblRyYXZlcnNlOjAuMS1TTkFQU0hPVCB3aXRoIGNsYXNzaWZpZXIgIHRvIC9Kc29uVHJhdmVyc2UvdGFyZ2V0L2NsYXNzZXMKKzIwMjEtMTEtMDQgMDg6Mzk6MDksMDIxIFtXb3JrZXItMTY6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMS0wNCAwODo0NDo1OSwwMDUgW1dvcmtlci0xNTogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDQgMDg6NDQ6NTksMDA3IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wNCAwOTo0MToyNSwyNjIgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAwOTo0MToyNSwyNjMgW1dvcmtlci0zOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMDk6NTc6MzIsNzM2IFtXb3JrZXItMzI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDA5OjU3OjMyLDczNiBbV29ya2VyLTMyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTA6Mzg6MTEsMzU1IFtXb3JrZXItMzU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDEwOjM4OjExLDM1NiBbV29ya2VyLTM1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTA6NDE6NDgsNDI2IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDEwOjQxOjQ4LDQyNyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTA6NDk6MjAsODIwIFtXb3JrZXItNDE6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDEwOjQ5OjIwLDgyMSBbV29ya2VyLTQxOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTA6NTY6MTgsNDE0IFtXb3JrZXItNDI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDEwOjU2OjE4LDQxNCBbV29ya2VyLTQyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTE6MDA6MDEsMzM3IFtXb3JrZXItMzk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDExOjAwOjAxLDMzNyBbV29ya2VyLTM5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMTU6NDg6NDcsNDAwIFtXb3JrZXItMTE4OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAxNTo0ODo0Nyw0MDEgW1dvcmtlci0xMTg6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wNCAxODo0MzoxNiw4MjUgW1dvcmtlci0xNTM6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDE4OjQzOjE2LDgyNiBbV29ya2VyLTE1MzogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA0IDE5OjEyOjM2LDk0NyBbV29ya2VyLTE2MjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDQgMTk6MTI6MzYsOTQ4IFtXb3JrZXItMTYyOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDQgMjE6MTc6MTMsMzU5IFtXb3JrZXItMTc0OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNCAyMToxNzoxMywzNzcgW1dvcmtlci0xNzQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wNCAyMTozMzo1MSw0ODcgW1dvcmtlci0xNzY6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA0IDIxOjMzOjUxLDQ4OCBbV29ya2VyLTE3NjogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gIG12biAtQiBpbnN0YWxsCisyMDIxLTExLTA1IDA4OjI2OjM2LDA4OSBbV29ya2VyLTE6IExvYWRpbmcgYXZhaWxhYmxlIEdyYWRsZSB2ZXJzaW9uc10gSU5GTyAgYy5nLnQudC5kLlB1Ymxpc2hlZEdyYWRsZVZlcnNpb25zIC0gR3JhZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gY2FjaGUgaXMgb3V0LW9mLWRhdGUuIFRyeWluZyB0byB1cGRhdGUuCisyMDIxLTExLTA1IDA4OjMwOjAxLDYxMSBbV29ya2VyLTA6IFJlc29sdmluZyBtb2RlbCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMF0gV0FSTiAgby5lLnIubW9kZWxzLk1vZGVsUmVwb3NpdG9yeSAtIEZhaWxlZCB0byBkb3dubG9hZCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6OnppcDowLjAuMAorb3JnLmVjbGlwc2UuYWV0aGVyLnJlc29sdXRpb24uQXJ0aWZhY3RSZXNvbHV0aW9uRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDUzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmVBcnRpZmFjdHMoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyNTUpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6MjMyKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLnJlc29sdmVBcnRpZmFjdChEZWZhdWx0UmVwb3NpdG9yeVN5c3RlbS5qYXZhOjMwMykgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlSW50ZXJuYWwoTW9kZWxSZXBvc2l0b3J5LmphdmE6MTkzKSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVsc18yLjUuMy52MjAxODA2MDktMTU1NC5qYXI6bmFdCisJYXQgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5Nb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShNb2RlbFJlcG9zaXRvcnkuamF2YToxNzIpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5FY2xpcHNlTW9kZWxSZXBvc2l0b3J5LnJlc29sdmUoRWNsaXBzZU1vZGVsUmVwb3NpdG9yeS5qYXZhOjE2OCkgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMuaW50ZXJuYWwubW9kZWxzLnJjcC5Eb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5ydW4oRG93bmxvYWRNb2RlbEFyY2hpdmVKb2IuamF2YTo3NikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMucmNwXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo2MCkgW29yZy5lY2xpcHNlLmNvcmUuam9ic18zLjEwLjAudjIwMTgwNDI3LTE0NTQuamFyOm5hXQorQ2F1c2VkIGJ5OiBvcmcuZWNsaXBzZS5hZXRoZXIudHJhbnNmZXIuQXJ0aWZhY3ROb3RGb3VuZEV4Y2VwdGlvbjogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3Qgb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzOmluZGV4OnppcDowLjAuMC1TTkFQU0hPVCBpbiBtb2RlbHMgKGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWNvbW1lbmRlcnMvbW9kZWxzL3Bob3Rvbi8pCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5BcnRpZmFjdFRyYW5zcG9ydExpc3RlbmVyLnRyYW5zZmVyRmFpbGVkKEFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIuamF2YTo0OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IkVGFza1J1bm5lci5ydW4oQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MzY0KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIudXRpbC5jb25jdXJyZW5jeS5SdW5uYWJsZUVycm9yRm9yd2FyZGVyJDEucnVuKFJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIuamF2YTo3NikgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciREaXJlY3RFeGVjdXRvci5leGVjdXRlKEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjU5MCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmNvbm5lY3Rvci5iYXNpYy5CYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuZ2V0KEJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5qYXZhOjI1OCkgfltvcmcuYXBhY2hlLm1hdmVuLnJlc29sdmVyLmNvbm5lY3Rvci5iYXNpY18xLjAuMy52MjAxNzA0MDUtMDcyNS5qYXI6MS4wLjNdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucGVyZm9ybURvd25sb2FkcyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjUyOSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NDMwKSB+W25hOm5hXQorCS4uLiA4IGNvbW1vbiBmcmFtZXMgb21pdHRlZAorMjAyMS0xMS0wNSAwODozMTo0MywyNTkgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSBDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjFcR2xlbW1TZXJ2aWNlcworMjAyMS0xMS0wNSAwODozMTo0MywyNjEgW1dvcmtlci0wOiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDUgMDk6MzM6MTUsMzU4IFtXb3JrZXItMTk6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA1IDA5OjMzOjE1LDM2MCBbV29ya2VyLTE5OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDUgMDk6MzQ6MzEsMjk2IFtXb3JrZXItMTU6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA1IDA5OjM0OjMxLDI5NiBbV29ya2VyLTE1OiBMYXVuY2hpbmcgRXhlY3V0aW5nIGluc3RhbGwgaW4gQ19fbXlJRFNfRGF0ZW5fS29yQVBfU2VydmljZXMtMC4xX0dsZW1tU2VydmljZXNdIElORk8gIG8uZS5tLmkubGF1bmNoLk1hdmVuTGF1bmNoRGVsZWdhdGUgLSAgbXZuIC1CIGluc3RhbGwKKzIwMjEtMTEtMDUgMTc6NTY6MDgsMjA0IFtXb3JrZXItMTogTG9hZGluZyBhdmFpbGFibGUgR3JhZGxlIHZlcnNpb25zXSBJTkZPICBjLmcudC50LmQuUHVibGlzaGVkR3JhZGxlVmVyc2lvbnMgLSBHcmFkbGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYWNoZSBpcyB1cC10by1kYXRlLiBUcnlpbmcgdG8gcmVhZC4KKzIwMjEtMTEtMDUgMTg6MDA6NTcsMDMxIFtXb3JrZXItODogUmVzb2x2aW5nIG1vZGVsIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wXSBXQVJOICBvLmUuci5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5IC0gRmFpbGVkIHRvIGRvd25sb2FkIG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDo6emlwOjAuMC4wCitvcmcuZWNsaXBzZS5hZXRoZXIucmVzb2x1dGlvbi5BcnRpZmFjdFJlc29sdXRpb25FeGNlcHRpb246IENvdWxkIG5vdCBmaW5kIGFydGlmYWN0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVyczppbmRleDp6aXA6MC4wLjAtU05BUFNIT1QgaW4gbW9kZWxzIChodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVjb21tZW5kZXJzL21vZGVscy9waG90b24vKQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0NTMpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIucmVzb2x2ZUFydGlmYWN0cyhEZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5qYXZhOjI1NSkgfltuYTpuYV0KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5yZXNvbHZlQXJ0aWZhY3QoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YToyMzIpIH5bbmE6bmFdCisJYXQgb3JnLmVjbGlwc2UuYWV0aGVyLmludGVybmFsLmltcGwuRGVmYXVsdFJlcG9zaXRvcnlTeXN0ZW0ucmVzb2x2ZUFydGlmYWN0KERlZmF1bHRSZXBvc2l0b3J5U3lzdGVtLmphdmE6MzAzKSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHMuTW9kZWxSZXBvc2l0b3J5LnJlc29sdmVJbnRlcm5hbChNb2RlbFJlcG9zaXRvcnkuamF2YToxOTMpIFtvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzXzIuNS4zLnYyMDE4MDYwOS0xNTU0LmphcjpuYV0KKwlhdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnMubW9kZWxzLk1vZGVsUmVwb3NpdG9yeS5yZXNvbHZlKE1vZGVsUmVwb3NpdG9yeS5qYXZhOjE3MikgW29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5tb2RlbHNfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkVjbGlwc2VNb2RlbFJlcG9zaXRvcnkucmVzb2x2ZShFY2xpcHNlTW9kZWxSZXBvc2l0b3J5LmphdmE6MTY4KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5pbnRlcm5hbC5tb2RlbHMucmNwLkRvd25sb2FkTW9kZWxBcmNoaXZlSm9iLnJ1bihEb3dubG9hZE1vZGVsQXJjaGl2ZUpvYi5qYXZhOjc2KSBbb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm1vZGVscy5yY3BfMi41LjMudjIwMTgwNjA5LTE1NTQuamFyOm5hXQorCWF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjYwKSBbb3JnLmVjbGlwc2UuY29yZS5qb2JzXzMuMTAuMC52MjAxODA0MjctMTQ1NC5qYXI6bmFdCitDYXVzZWQgYnk6IG9yZy5lY2xpcHNlLmFldGhlci50cmFuc2Zlci5BcnRpZmFjdE5vdEZvdW5kRXhjZXB0aW9uOiBDb3VsZCBub3QgZmluZCBhcnRpZmFjdCBvcmcuZWNsaXBzZS5yZWNvbW1lbmRlcnM6aW5kZXg6emlwOjAuMC4wLVNOQVBTSE9UIGluIG1vZGVscyAoaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlY29tbWVuZGVycy9tb2RlbHMvcGhvdG9uLykKKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkFydGlmYWN0VHJhbnNwb3J0TGlzdGVuZXIudHJhbnNmZXJGYWlsZWQoQXJ0aWZhY3RUcmFuc3BvcnRMaXN0ZW5lci5qYXZhOjQ4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3RvciRUYXNrUnVubmVyLnJ1bihCYXNpY1JlcG9zaXRvcnlDb25uZWN0b3IuamF2YTozNjQpIH5bb3JnLmFwYWNoZS5tYXZlbi5yZXNvbHZlci5jb25uZWN0b3IuYmFzaWNfMS4wLjMudjIwMTcwNDA1LTA3MjUuamFyOjEuMC4zXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci51dGlsLmNvbmN1cnJlbmN5LlJ1bm5hYmxlRXJyb3JGb3J3YXJkZXIkMS5ydW4oUnVubmFibGVFcnJvckZvcndhcmRlci5qYXZhOjc2KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5jb25uZWN0b3IuYmFzaWMuQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6NTkwKSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuY29ubmVjdG9yLmJhc2ljLkJhc2ljUmVwb3NpdG9yeUNvbm5lY3Rvci5nZXQoQmFzaWNSZXBvc2l0b3J5Q29ubmVjdG9yLmphdmE6MjU4KSB+W29yZy5hcGFjaGUubWF2ZW4ucmVzb2x2ZXIuY29ubmVjdG9yLmJhc2ljXzEuMC4zLnYyMDE3MDQwNS0wNzI1LmphcjoxLjAuM10KKwlhdCBvcmcuZWNsaXBzZS5hZXRoZXIuaW50ZXJuYWwuaW1wbC5EZWZhdWx0QXJ0aWZhY3RSZXNvbHZlci5wZXJmb3JtRG93bmxvYWRzKERlZmF1bHRBcnRpZmFjdFJlc29sdmVyLmphdmE6NTI5KSB+W25hOm5hXQorCWF0IG9yZy5lY2xpcHNlLmFldGhlci5pbnRlcm5hbC5pbXBsLkRlZmF1bHRBcnRpZmFjdFJlc29sdmVyLnJlc29sdmUoRGVmYXVsdEFydGlmYWN0UmVzb2x2ZXIuamF2YTo0MzApIH5bbmE6bmFdCisJLi4uIDggY29tbW9uIGZyYW1lcyBvbWl0dGVkCisyMDIxLTExLTA1IDE4OjA0OjI3LDYxNiBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtIEM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVxHbGVtbVNlcnZpY2VzCisyMDIxLTExLTA1IDE4OjA0OjI3LDYyMSBbV29ya2VyLTI6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wNSAxODozMTo0OCwzMzMgW1dvcmtlci0xNDogTGF1bmNoaW5nIEV4ZWN1dGluZyBpbnN0YWxsIGluIENfX215SURTX0RhdGVuX0tvckFQX1NlcnZpY2VzLTAuMV9HbGVtbVNlcnZpY2VzXSBJTkZPICBvLmUubS5pLmxhdW5jaC5NYXZlbkxhdW5jaERlbGVnYXRlIC0gQzpcbXlJRFNcRGF0ZW5cS29yQVBcU2VydmljZXMtMC4xXEdsZW1tU2VydmljZXMKKzIwMjEtMTEtMDUgMTg6MzE6NDgsMzM1IFtXb3JrZXItMTQ6IExhdW5jaGluZyBFeGVjdXRpbmcgaW5zdGFsbCBpbiBDX19teUlEU19EYXRlbl9Lb3JBUF9TZXJ2aWNlcy0wLjFfR2xlbW1TZXJ2aWNlc10gSU5GTyAgby5lLm0uaS5sYXVuY2guTWF2ZW5MYXVuY2hEZWxlZ2F0ZSAtICBtdm4gLUIgaW5zdGFsbAorMjAyMS0xMS0wOSAxNToxNzo0Miw3ODAgW1dvcmtlci04OiBMb2FkaW5nIGF2YWlsYWJsZSBHcmFkbGUgdmVyc2lvbnNdIElORk8gIGMuZy50LnQuZC5QdWJsaXNoZWRHcmFkbGVWZXJzaW9ucyAtIEdyYWRsZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhY2hlIGlzIG91dC1vZi1kYXRlLiBUcnlpbmcgdG8gdXBkYXRlLgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubG9nYmFjay5jb25maWd1cmF0aW9uL2xvZ2JhY2suMS45LjAuMjAxODA2MDYtMjAzNi54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmNvbmZpZ3VyYXRpb24vbG9nYmFjay4xLjkuMC4yMDE4MDYwNi0yMDM2LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzM3NThjCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubG9nYmFjay5jb25maWd1cmF0aW9uL2xvZ2JhY2suMS45LjAuMjAxODA2MDYtMjAzNi54bWwKQEAgLTAsMCArMSw0MyBAQAorPGNvbmZpZ3VyYXRpb24gc2Nhbj0idHJ1ZSI+CisgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+CisgICAgPGVuY29kZXIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNsYXNzaWMuZW5jb2Rlci5QYXR0ZXJuTGF5b3V0RW5jb2RlciI+CisgICAgICA8cGF0dGVybj4lZGF0ZSBbJXRocmVhZF0gJS01bGV2ZWwgJWxvZ2dlcnszNX0gLSAlbXNnJW48L3BhdHRlcm4+CisgICAgPC9lbmNvZGVyPgorICAgIDxmaWx0ZXIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNsYXNzaWMuZmlsdGVyLlRocmVzaG9sZEZpbHRlciI+CisgICAgICA8bGV2ZWw+T0ZGPC9sZXZlbD4gPCEtLSBjaGFuZ2UgdG8gREVCVUcgdG8gbWltaWMgJy1jb25zb2xlbG9nJyBiZWhhdmlvdXIgLS0+CisgICAgPC9maWx0ZXI+CisgIDwvYXBwZW5kZXI+CisKKyAgPGFwcGVuZGVyIG5hbWU9IkZJTEUiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLnJvbGxpbmcuUm9sbGluZ0ZpbGVBcHBlbmRlciI+CisgICAgPEZpbGU+JHtvcmcuZWNsaXBzZS5tMmUubG9nLmRpcn0vMC5sb2c8L0ZpbGU+CisgICAgPHJvbGxpbmdQb2xpY3kgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUucm9sbGluZy5GaXhlZFdpbmRvd1JvbGxpbmdQb2xpY3kiPgorICAgICAgPEZpbGVOYW1lUGF0dGVybj4ke29yZy5lY2xpcHNlLm0yZS5sb2cuZGlyfS8laS5sb2c8L0ZpbGVOYW1lUGF0dGVybj4KKyAgICAgIDxNaW5JbmRleD4xPC9NaW5JbmRleD4KKyAgICAgIDxNYXhJbmRleD4xMDwvTWF4SW5kZXg+CisgICAgPC9yb2xsaW5nUG9saWN5PgorICAgIDx0cmlnZ2VyaW5nUG9saWN5IGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLnJvbGxpbmcuU2l6ZUJhc2VkVHJpZ2dlcmluZ1BvbGljeSI+CisgICAgICA8TWF4RmlsZVNpemU+MTAwTUI8L01heEZpbGVTaXplPgorICAgIDwvdHJpZ2dlcmluZ1BvbGljeT4KKyAgICA8ZW5jb2RlciBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY2xhc3NpYy5lbmNvZGVyLlBhdHRlcm5MYXlvdXRFbmNvZGVyIj4KKyAgICAgIDxwYXR0ZXJuPiVkYXRlIFsldGhyZWFkXSAlLTVsZXZlbCAlbG9nZ2VyezM1fSAtICVtc2clbjwvcGF0dGVybj4KKyAgICA8L2VuY29kZXI+CisgIDwvYXBwZW5kZXI+CisKKyAgPGFwcGVuZGVyIG5hbWU9IkVjbGlwc2VMb2ciIGNsYXNzPSJvcmcuZWNsaXBzZS5tMmUubG9nYmFjay5hcHBlbmRlci5FY2xpcHNlTG9nQXBwZW5kZXIiPgorICAgIDxmaWx0ZXIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNsYXNzaWMuZmlsdGVyLlRocmVzaG9sZEZpbHRlciI+CisgICAgICA8bGV2ZWw+V0FSTjwvbGV2ZWw+CisgICAgPC9maWx0ZXI+CisgIDwvYXBwZW5kZXI+CisKKyAgPGFwcGVuZGVyIG5hbWU9Ik1hdmVuQ29uc29sZUxvZyIgY2xhc3M9Im9yZy5lY2xpcHNlLm0yZS5sb2diYWNrLmFwcGVuZGVyLk1hdmVuQ29uc29sZUFwcGVuZGVyIj4KKyAgPC9hcHBlbmRlcj4KKyAgICAgICAgCisgIDxyb290IGxldmVsPSJJTkZPIj4KKyAgICA8YXBwZW5kZXItcmVmIHJlZj0iRklMRSIgLz4KKyAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPgorICAgIDxhcHBlbmRlci1yZWYgcmVmPSJFY2xpcHNlTG9nIiAvPgorICAgIDxhcHBlbmRlci1yZWYgcmVmPSJNYXZlbkNvbnNvbGVMb2ciIC8+CisgIDwvcm9vdD4KKworICA8bG9nZ2VyIG5hbWU9ImNvbS5uaW5nLmh0dHAuY2xpZW50IiBsZXZlbD0iSU5GTyIgLz4KKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uub29tcGguc2V0dXAvd29ya3NwYWNlLnNldHVwIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5vb21waC5zZXR1cC93b3Jrc3BhY2Uuc2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3M2UxNAotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uub29tcGguc2V0dXAvd29ya3NwYWNlLnNldHVwCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZXR1cDpXb3Jrc3BhY2UKKyAgICB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIKKyAgICB4bWxuczpzZXR1cD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vb21waC9zZXR1cC8xLjAiCisgICAgbmFtZT0id29ya3NwYWNlIi8+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnBkZS5jb3JlLy5jYWNoZS9jbGVhbi1jYWNoZS5wcm9wZXJ0aWVzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5wZGUuY29yZS8uY2FjaGUvY2xlYW4tY2FjaGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y5M2I0Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5wZGUuY29yZS8uY2FjaGUvY2xlYW4tY2FjaGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKKyNDYWNoZWQgdGltZXN0YW1wcworI0ZyaSBNYXIgMDYgMTc6NTI6MDcgQ0VUIDIwMjAKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MuaW1wbC9kb3dubG9hZHMvaHR0cCUzQSUyRiUyRnd3dy5lY2xpcHNlLm9yZyUyRmhvbWUlMkZlY2xpcHNlbmV3cy5yc3MgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLmltcGwvZG93bmxvYWRzL2h0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZob21lJTJGZWNsaXBzZW5ld3MucnNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwM2Q5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLmltcGwvZG93bmxvYWRzL2h0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZob21lJTJGZWNsaXBzZW5ld3MucnNzCkBAIC0wLDAgKzEsMTQ4NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorIDxyc3MgdmVyc2lvbj0iMi4wIj4KKyAgPGNoYW5uZWw+CisgICAgPHRpdGxlPkVjbGlwc2UgTmV3czwvdGl0bGU+CisgICAgPGxpbms+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvbGluaz4KKyAgICA8ZGVzY3JpcHRpb24+RWNsaXBzZSBOZXdzPC9kZXNjcmlwdGlvbj4KKyAgICA8aW1hZ2U+CisgICAgICA8dXJsPmh0dHA6Ly9lY2xpcHNlLm9yZy9lY2xpcHNlLm9yZy1jb21tb24vdGhlbWVzL05vdmEvaW1hZ2VzL2VjbGlwc2UucG5nPC91cmw+CisgICAgICA8dGl0bGU+ZWNsaXBzZS5vcmc8L3RpdGxlPgorICAgICAgPGxpbms+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvbGluaz4KKyAgICA8L2ltYWdlPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gMjAyMCBDRlAgaXMgT3Blbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvZWNsaXBzZWNvbi0yMDIwLWNmcC1vcGVuXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0lmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBzcGVha2luZywgb3VyIGNhbGwgZm9yIHByb3Bvc2FscyBpcyBub3cgb3Blbi4gUGxlYXNlIHZpc2l0IHRoZSBDRlAgcGFnZSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHN1Ym1pdCB5b3VyIHRhbGsuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTYgQXByIDIwMjAgMTU6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0FkZCBZb3VyIFZvaWNlIHRvIHRoZSAyMDIwIEpha2FydGEgRUUgRGV2ZWxvcGVyIFN1cnZleV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvbWlrZS1taWxpbmtvdmljaC9hZGQteW91ci12b2ljZS0yMDIwLWpha2FydGEtZWUtZGV2ZWxvcGVyLXN1cnZleV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPdXIgdGhpcmQgYW5udWFsIEpha2FydGEgRUUgRGV2ZWxvcGVyIFN1cnZleSBpcyBub3cgb3BlbiBhbmQgSSBlbmNvdXJhZ2UgZXZlcnlvbmUgdG8gdGFrZSBhIGZldyBtaW51dGVzIGFuZCBjb21wbGV0ZSB0aGUgc3VydmV5IGJlZm9yZSB0aGUgQXByaWwgMzAgZGVhZGxpbmUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgNyBBcHIgMjAyMCAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBSZWxlYXNlcyBFY2xpcHNlIFRoZWlhIDEuMCwgYSBUcnVlIE9wZW4gU291cmNlIEFsdGVybmF0aXZlIHRvIFZpc3VhbCBTdHVkaW8gQ29kZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDIwMDMzMS10aGVpYS5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgb25lIG9mIHRoZSB3b3JsZOKAmXMgbGFyZ2VzdCBvcGVuIHNvdXJjZSBmb3VuZGF0aW9ucywgdG9kYXkgYW5ub3VuY2VkIHRoZSByZWxlYXNlIG9mIFRoZWlhIDEuMCwgYSB0cnVlIG9wZW4gc291cmNlIGFsdGVybmF0aXZlIHRvIE1pY3Jvc29mdOKAmXMgcG9wdWxhciBWaXN1YWwgU3R1ZGlvIENvZGUgKFZTIENvZGUpIHNvZnR3YXJlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDMxIE1hciAyMDIwIDA3OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIDIwMjAgdG8gQmUgSGVsZCBhcyBWaXJ0dWFsIEV2ZW50XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9wYXVsLXdoaXRlL2VjbGlwc2Vjb24tMjAyMC1iZS1oZWxkLXZpcnR1YWwtZXZlbnRdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBhbm5vdW5jaW5nIHRvZGF5IHRoYXQgaXQgd2lsbCBob2xkIGl0cyBhbm51YWwgRWNsaXBzZUNvbiBjb25mZXJlbmNlIGFzIGEgdmlydHVhbCBldmVudC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAyNyBNYXIgMjAyMCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFN1cHBvcnRzIEVVIEZ1bmRlZCBTbWFydENMSURFIFByb2plY3RdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAyMDAzMjYtc21hcnRjbGlkZS5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQSBFdXJvcGVhbiBjb25zb3J0aXVtIG9mIGVsZXZlbiBwYXJ0bmVycyBmcm9tIEdlcm1hbnksIEdyZWVjZSwgTHV4ZW1ib3VyZywgUG9ydHVnYWwsIFNwYWluLCBhbmQgdGhlIFVuaXRlZCBLaW5nZG9tIGhhcyBhbm5vdW5jZWQgdGhlIGxhdW5jaCBvZiB0aGUgU21hcnRDTElERSBwcm9qZWN0LCBhIOKCrDQuOSBtaWxsaW9uIHJlc2VhcmNoIHByb2plY3QgZnVuZGVkIGJ5IHRoZSBFdXJvcGVhbiBVbmlvbuKAmXMgSG9yaXpvbiAyMDIwIHJlc2VhcmNoIGFuZCBpbm5vdmF0aW9uIHByb2dyYW0uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjYgTWFyIDIwMjAgMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBCb2FyZCBFbGVjdGlvbiBSZXN1bHRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMjAwMzE5LWJvYXJkZWxlY3Rpb24ucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvZGF5IHdlIGFyZSBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSByZXN1bHRzIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gU3VzdGFpbmluZyBNZW1iZXIgYW5kIENvbW1pdHRlciBNZW1iZXIgZWxlY3Rpb25zIGZvciByZXByZXNlbnRhdGl2ZXMgdG8gb3VyIEJvYXJkIG9mIERpcmVjdG9ycy4gVGhlIHBvc2l0aW9ucyBvZiBTdXN0YWluaW5nIE1lbWJlcnMgYW5kIENvbW1pdHRlciByZXByZXNlbnRhdGl2ZXMgYXJlIGEgdml0YWxseSBpbXBvcnRhbnQgcGFydCBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uJ3MgZ292ZXJuYW5jZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxOSBNYXIgMjAyMCAwOTo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbUmVhbC1Xb3JsZCBJb1QgQWRvcHRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvcmVhbC13b3JsZC1pb3QtYWRvcHRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIHJlc3VsdHMgb2Ygb3VyIGZpcnN0IElvVCBDb21tZXJjaWFsIEFkb3B0aW9uIHN1cnZleSB0ZWxsIGEgY2xlYXIgc3RvcnkgYWJvdXQgd2hhdCBvcmdhbml6YXRpb25zIGFyZSBkb2luZyB3aXRoIElvVCByaWdodCBub3cgYW5kIHRoZWlyIHBsYW5zIGZvciBwcm9kdWN0aW9uIGRlcGxveW1lbnRzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDEzIE1hciAyMDIwIDEyOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIFJlbGVhc2VzIElvVCBDb21tZXJjaWFsIEFkb3B0aW9uIFN1cnZleSBSZXN1bHRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMjAwMzEwLWlvdC1jb21tZXJjaWFsLWFkb3B0aW9uLXN1cnZleS0yMDE5LnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFubm91bmNlZCB0aGUgcmVsZWFzZSBvZiBpdHMgZmlyc3QgYW5udWFsIElvVCBDb21tZXJjaWFsIEFkb3B0aW9uIHN1cnZleS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxMCBNYXIgMjAyMCAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSU9UQSBhbmQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBMYXVuY2ggV29ya2luZyBHcm91cCB0byBEZXZlbG9wIENvbW1lcmNpYWwgQXBwbGljYXRpb25zIG9uIERpc3RyaWJ1dGVkIExlZGdlciBUZWNobm9sb2d5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMjAwMjEyLWlvdGEucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW05ldyBUYW5nbGUgRUUgV29ya2luZyBHcm91cCBCcmluZ3MgVG9nZXRoZXIgRmlmdGVlbiBEaXZlcnNlIE9yZ2FuaXphdGlvbnMgdG8gRm9zdGVyIERhdGEgYW5kIFBheW1lbnQgSW5ub3ZhdGlvbiBvbiBEaXN0cmlidXRlZCBMZWRnZXIgVGVjaG5vbG9neSAoRExUKV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDExIEZlYiAyMDIwIDA4OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtTcGFya3BsdWc6IFN0YW5kYXJkaXppbmcgSW5kdXN0cmlhbCBJb1QgQ29tbXVuaWNhdGlvbnNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvc3BhcmtwbHVnLXN0YW5kYXJkaXppbmctaW5kdXN0cmlhbC1pb3QtY29tbXVuaWNhdGlvbnNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2l0aCB0aGUgbGF1bmNoIHRoaXMgd2VlayBvZiB0aGUgU3BhcmtwbHVnIFdvcmtpbmcgR3JvdXAsIHdl4oCZcmUgYnJpbmdpbmcgdG9nZXRoZXIgdGhlIGluZHVzdHJ5IGxlYWRlcnMgYW5kIHRlY2hub2xvZ2llcyBuZWVkZWQgdG8gZHJpdmUuLi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAwNiBGZWIgMjAyMCAxMzo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBMYXVuY2hlcyB0aGUgU3BhcmtwbHVnIFdvcmtpbmcgR3JvdXAgdG8gQnJpbmcgRGV2aWNlIENvbW11bmljYXRpb25zIFN0YW5kYXJkaXphdGlvbiB0byB0aGUgSW5kdXN0cmlhbCBJbnRlcm5ldCBvZiBUaGluZ3MgYW5kIEluZHVzdHJpYWwgQXV0b21hdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAyMC8wMi8wMy8xOTc4OTExLzAvZW4vVGhlLUVjbGlwc2UtRm91bmRhdGlvbi1MYXVuY2hlcy10aGUtU3BhcmtwbHVnLVdvcmtpbmctR3JvdXAtdG8tQnJpbmctRGV2aWNlLUNvbW11bmljYXRpb25zLVN0YW5kYXJkaXphdGlvbi10by10aGUtSW5kdXN0cmlhbC1JbnRlcm5ldC1vZi1UaGluZ3MtYW5kLUluZHVzdHJpYWwtQXV0b21hdGlvbi5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0ZvdW5kaW5nIG1lbWJlcnMgQ2hldnJvbiwgQ2FuYXJ5IExhYnMsIENpcnJ1cyBMaW5rIFNvbHV0aW9ucywgSGl2ZU1RLCBJbmR1Y3RpdmUgQXV0b21hdGlvbiwgYW5kIE9SaW5nIGFyZSBkZWZpbmluZyBhbiBvcGVuIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gdG8gY3JlYXRlIGludGVyb3BlcmFibGUgTVFUVCBJSW9UIHNvbHV0aW9uc11dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDA0IEZlYiAyMDIwIDg6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gQW5ub3VuY2VzIHRoZSBDTjRKIERheSAyMDIwIEV2ZW50IGZvciBCdWlsZGluZyBFbnRlcnByaXNlIEphdmEgb24gS3ViZXJuZXRlc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2pha2FydGEuZWUvbmV3cy9hbm5vdW5jZW1lbnRzLzIwMjAvMDEvMjgvdGhlLWVjbGlwc2UtZm91bmRhdGlvbi1hbm5vdW5jZXMtdGhlLWNuNGotZGF5LTIwMjAtZXZlbnQtZm9yLWJ1aWxkaW5nLWVudGVycHJpc2UtamF2YS1vbi1rdWJlcm5ldGVzL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUb2RheSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFubm91bmNlZCB0aGUgbGF1bmNoIG9mIHRoZSBDbG91ZCBOYXRpdmUgZm9yIEphdmEgKENONEopIERheSBldmVudCwgYSBmdWxsLWRheSBvZiBleHBlcnQgdGFsa3MsIGRlbW9zLCBhbmQgdGhvdWdodC1wcm92b2tpbmcgc2Vzc2lvbnMgZm9jdXNlZCBvbiBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucyBpbXBsZW1lbnRlZCB1c2luZyBvcGVuIHNvdXJjZSB2ZW5kb3ItbmV1dHJhbCBKYWthcnRhIEVFIChzdWNjZXNzb3Igb2YgSmF2YSBFRSkgYW5kIEVjbGlwc2UgTWljcm9Qcm9maWxlIHNwZWNpZmljYXRpb25zIG9uIEt1YmVybmV0ZXMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjggSmFuIDIwMjAgODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTW92aW5nIEZvcndhcmQgV2l0aCBKYWthcnRhIEVFIDldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvbW92aW5nLWZvcndhcmQtamFrYXJ0YS1lZS05XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW09uIGJlaGFsZiBvZiB0aGUgSmFrYXJ0YSBFRSBXb3JraW5nIEdyb3VwLCB3ZSBhcmUgZXhjaXRlZCB0byBhbm5vdW5jZSB0aGUgdW5hbmltb3VzIGFwcHJvdmFsIG9mIHRoZSBwbGFuIGZvciBKYWthcnRhIEVFIDksIHdpdGggYW4gYW50aWNpcGF0ZWQgbWlkLTIwMjAgcmVsZWFzZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyMCBKYW4gMjAyMCAxMDo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIHJlYWxpdGllcyBvZiBydW5uaW5nIGFuIG9wZW4tc291cmNlIGNvbW11bml0eV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3NkdGltZXMuY29tL29wZW4tc291cmNlL3RoZS1yZWFsaXRpZXMtb2YtcnVubmluZy1hbi1vcGVuLXNvdXJjZS1jb21tdW5pdHkvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBiZW5lZml0cyBvZiB1c2luZyBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBpcyBpbW1lYXN1cmFibGUsIGJ1dCBpdOKAmXMgbm90IHRoZSBjb2RlIGl0c2VsZiB0aGF0IG1ha2VzIG9wZW4tc291cmNlIHNvZnR3YXJlIGFuIGludmFsdWFibGUgcmVzb3VyY2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgOSBKYW4gMjAyMCAwOTo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9u4oCZcyBOZXcgQnlsYXdzIEFyZSBpbiBFZmZlY3RdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAyMDAxMDctYnlsYXdzX3JlbGVhc2VfMy5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgYXJlIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhlIEVjbGlwc2UgRm91bmRhdGlvbuKAmXMgbmV3IEJ5bGF3cyB3ZW50IGludG8gZWZmZWN0IG9uIEphbnVhcnkgMSwgMjAyMC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCA3IEphbiAyMDIwIDA5OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDbG9zZSB0byB0aGUgRWRnZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvbWlrZS1taWxpbmtvdmljaC9jbG9zZS1lZGdlXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvZGF5IHdlIGFyZSBsYXVuY2hpbmcgb3VyIG5ldyBFZGdlIE5hdGl2ZSBXb3JraW5nIEdyb3VwIHRvIGhlbHAgZHJpdmUgdGhlIGluZHVzdHJ5IHBsYXRmb3JtIGZvciBlZGdlIGNvbXB1dGluZy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNyBEZWMgMjAxOSA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIExhdW5jaGVzIHRoZSBFZGdlIE5hdGl2ZSBXb3JraW5nIEdyb3VwIHRvIERlbGl2ZXIgUHJvZHVjdGlvbi1HcmFkZSBDb2RlIGZvciBPcGVuIFNvdXJjZSBFZGdlIENvbXB1dGluZ11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOS8xMi8xMC8xOTU4NDI4LzAvZW4vVGhlLUVjbGlwc2UtRm91bmRhdGlvbi1MYXVuY2hlcy10aGUtRWRnZS1OYXRpdmUtV29ya2luZy1Hcm91cC10by1EZWxpdmVyLVByb2R1Y3Rpb24tR3JhZGUtQ29kZS1mb3ItT3Blbi1Tb3VyY2UtRWRnZS1Db21wdXRpbmcuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvZGF5IGFubm91bmNlZCB0aGUgbGF1bmNoIG9mIHRoZSBFZGdlIE5hdGl2ZSBXb3JraW5nIEdyb3VwLCBhIHZlbmRvci1uZXV0cmFsIGFuZCBjb2RlLWZpcnN0IGluZHVzdHJ5IGNvbGxhYm9yYXRpb24gdGhhdCB3aWxsIGRyaXZlIHRoZSBldm9sdXRpb24gYW5kIGJyb2FkIGFkb3B0aW9uIG9mIG9wZW4gc291cmNlIHNvZnR3YXJlIGZvciBlZGdlIGNvbXB1dGluZy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxMCBEZWMgMjAxOSA5OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtQYXJ0aWNpcGF0ZSBpbiB0aGUgMjAxOSBJb1QgQ29tbWVyY2lhbCBBZG9wdGlvbiBTdXJ2ZXkhIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvcGFydGljaXBhdGUtMjAxOS1pb3QtY29tbWVyY2lhbC1hZG9wdGlvbi1zdXJ2ZXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQWNjb3JkaW5nIHRvIE1jS2luc2V5LCB0aGUgSW50ZXJuZXQgb2YgVGhpbmdzIChJb1QpIHdpbGwgaGF2ZSBhIHRvdGFsIHBvdGVudGlhbCBlY29ub21pYyBpbXBhY3Qgb2YgdXAgdG8gJDExLjEgdHJpbGxpb24gYSB5ZWFyIGJ5IDIwMjUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTAgT2N0IDIwMTkgMTA6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1BheWFyYSBTZXJ2ZXIgaXMgSmFrYXJ0YSBFRSA4IENvbXBhdGlibGUhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTkxMDA5LXBheWFyYS5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbUGF5YXJhIFNlcnZpY2VzIGFuZCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIHRvZGF5IGFubm91bmNlZCB0aGUgYXBwbGljYXRpb24gc2VydmVyICxQYXlhcmEgU2VydmVyLCBhIEpha2FydGEgRUUgOCBjb21wYXRpYmxlIGltcGxlbWVudGF0aW9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDkgT2N0IDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gTGF1bmNoZXMgVGhlIEVjbGlwc2UgQ2xvdWQgRGV2ZWxvcG1lbnQgVG9vbHMgV29ya2luZyBHcm91cCBmb3IgQ2xvdWQgTmF0aXZlIFNvZnR3YXJlIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE5MTAwOC1FQ0QucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG9kYXkgYW5ub3VuY2VkIHRoZSBsYXVuY2ggb2YgdGhlIEVjbGlwc2UgQ2xvdWQgRGV2ZWxvcG1lbnQgVG9vbHMgV29ya2luZyBHcm91cCAoRUNEIFdHKV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDggT2N0IDIwMTkgMTM6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Vhcmx5IHJlZ2lzdHJhdGlvbiBmb3IgRWNsaXBzZUNvbiBFdXJvcGUgZW5kcyBPY3RvYmVyIDEhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTkvcmVnaXN0cmF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0lmIHlvdSBoYXZlbid0IGdvdCB5b3VyIHRpY2tldHMgeWV0LCByZWdpc3RlciBub3cgYW5kIHNhdmUgZm9yIEVjbGlwc2VDb24gRXVyb3BlISBFYXJseSBCaXJkIHByaWNpbmcgZW5kcyB0b21vcnJvdyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAzMCBTZXAgMjAxOSAxMTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0NhbGwgZm9yIEJpcmRzIG9mIEZlYXRoZXIncyAoQm9GcykgZm9yIEVjbGlwc2VDb24gRXVyb3BlIDIwMTkhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTkvbmV3cy9jYWxsLWJvZnNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ29tbXVuaXR5IEV2ZW5pbmcgaW5jbHVkZXMgYW4gRWRnZSBDb21wdXRpbmcgaGFja2F0aG9uLCBhIFByb2plY3QgUGl0Y2ggZ2FtZSwgRWNsaXBzZSBOaWdodCBTY2hvb2wsIGFuZCAtIG9mIGNvdXJzZSAtIEJvRnMhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjQgU2VwIDIwMTkgMTE6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDb21lIHRvIEVjbGlwc2UgTmlnaHQgU2Nob29sIGF0IEVjbGlwc2VDb24gRXVyb3BlIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE5L25ld3MvZWNsaXBzZS1uaWdodC1zY2hvb2xdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ29tZSB0byBOaWdodCBTY2hvb2wsIGFuZCBsZWFybiBhbGwgYWJvdXQgd2hhdCB0aGUgRm91bmRhdGlvbiBzdGFmZiBkb2VzIHRvIG1ha2UgeW91ciAoRWNsaXBzZSkgbGlmZSBiZXR0ZXIhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjQgU2VwIDIwMTkgMTE6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gV2lucyBEdWtlJ3MgQ2hvaWNlIEF3YXJkIGZvciBPcGVuIFNvdXJjZSBDb250cmlidXRpb25zIHRvIHRoZSBKYXZhIEVjb3N5c3RlbV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOS8wOS8xNy8xOTE2NTMxLzAvZW4vVGhlLUVjbGlwc2UtRm91bmRhdGlvbi1XaW5zLUR1a2Utcy1DaG9pY2UtQXdhcmQtZm9yLU9wZW4tU291cmNlLUNvbnRyaWJ1dGlvbnMtdG8tdGhlLUphdmEtRWNvc3lzdGVtLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiB3YXMgYXdhcmRlZCBhIER1a2UncyBDaG9pY2UgQXdhcmQgeWVzdGVyZGF5IGluIHJlY29nbml0aW9uIGZvciBvdXRzdGFuZGluZyBvcGVuIHNvdXJjZSBjb250cmlidXRpb25zIHRvIHRoZSBKYXZhIGVjb3N5c3RlbSBhbmQgdGhlIGNvbW11bml0eS1kcml2ZW4gYWNoaWV2ZW1lbnQgb2YgbW92aW5nIEphdmEgRUUgdGVjaG5vbG9naWVzIGZyb20gT3JhY2xlIHRvIHRoZSBKYWthcnRhIEVFIFdvcmtpbmcgR3JvdXAuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTcgU2VwIDIwMTkgOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gUmVsZWFzZXMgRWNsaXBzZSBDaGUgNywgdGhlIEZpcnN0IEt1YmVybmV0ZXMtTmF0aXZlIElERSwgdG8gTWFrZSBDcmVhdGluZyBDbG91ZCBOYXRpdmUgQXBwbGljYXRpb25zIEVhc2llciwgRmFzdGVyLCBhbmQgTW9yZSBTZWN1cmVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDkvMTcvMTkxNjUyMi8wL2VuL1RoZS1FY2xpcHNlLUZvdW5kYXRpb24tUmVsZWFzZXMtRWNsaXBzZS1DaGUtNy10aGUtRmlyc3QtS3ViZXJuZXRlcy1OYXRpdmUtSURFLXRvLU1ha2UtQ3JlYXRpbmctQ2xvdWQtTmF0aXZlLUFwcGxpY2F0aW9ucy1FYXNpZXItRmFzdGVyLWFuZC1Nb3JlLVNlY3VyZS5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG9kYXkgYW5ub3VuY2VkIGF0IHRoZSBPcmFjbGUgQ29kZSBPbmUgY29uZmVyZW5jZSBhbmQgdHJhZGVzaG93IHRoZSByZWxlYXNlIG9mIEVjbGlwc2UgQ2hlIDcsIHRoZSBmaXJzdCBkZXZlbG9wZXIgd29ya3NwYWNlIHNlcnZlciBhbmQgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCAoSURFKSBmb3IgY3JlYXRpbmcgY2xvdWQgbmF0aXZlLCBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucyBvbiBLdWJlcm5ldGVzXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTcgU2VwIDIwMTkgOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgQ29tbXVuaXR5IENvbnRpbnVlcyB0byBEZWxpdmVyIG9uIE9wZW4gU291cmNlIENvbW1pdG1lbnRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L2VjbGlwc2UtY29tbXVuaXR5LWNvbnRpbnVlcy1kZWxpdmVyLW9wZW4tc291cmNlLWNvbW1pdG1lbnRdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ29tbXVuaXR5IGlzIGtleS4gQW5kIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24ncyBjb21tdW5pdHkgaXMgb24gYSByb2xsLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDE3IFNlcCAyMDE5IDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIEV1cm9wZSAyMDE5IEtleW5vdGVzIEFubm91bmNlZCAtIFJlZ2lzdGVyIE5vdyFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxOS9rZXlub3Rlc11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBhcmUgZXhjaXRlZCB0byBhbm5vdW5jZSB0aGUga2V5bm90ZSBzcGVha2VyIGxpbmV1cCBmb3Igb3VyIGNvbW11bml0eSdzIGJpZ2dlc3QgZXZlbnQgb2YgdGhlIHllYXIuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTcgU2VwIDIwMTkgOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBSZWxlYXNlcyBKYWthcnRhIEVFIDggU3BlY2lmaWNhdGlvbnM7IENvbXBsZXRlcyBUcmFuc2l0aW9uIHRvIEVjbGlwc2UgRm91bmRhdGlvbiBhcyB0aGUgTmV3IEhvbWUgZm9yIE9wZW4gU291cmNlIENsb3VkIE5hdGl2ZSBKYXZhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE5LzA5LzEwLzE5MTMzMDAvMC9lbi9UaGUtRWNsaXBzZS1Gb3VuZGF0aW9uLVJlbGVhc2VzLUpha2FydGEtRUUtOC1TcGVjaWZpY2F0aW9ucy1Db21wbGV0ZXMtVHJhbnNpdGlvbi10by1FY2xpcHNlLUZvdW5kYXRpb24tYXMtdGhlLU5ldy1Ib21lLWZvci1PcGVuLVNvdXJjZS1DbG91ZC1OYXRpdmUtSmF2YS5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG9kYXkgYW5ub3VuY2VkIGR1cmluZyB0aGUgSmFrYXJ0YU9uZSBMaXZlc3RyZWFtIHZpcnR1YWwgY29uZmVyZW5jZSB0aGUgcmVsZWFzZSBvZiB0aGUgSmFrYXJ0YSBFRSA4IEZ1bGwgUGxhdGZvcm0gYW5kIFdlYiBQcm9maWxlIHNwZWNpZmljYXRpb25zIGFuZCByZWxhdGVkIFRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXRzIChUQ0tzKS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNyBTZXAgMjAxOSA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtPcGVuQUR4IEJlY29tZXMgRWNsaXBzZSBXb3JraW5nIEdyb3VwIEZvY3VzZWQgb24gSW50ZXJvcGVyYWJpbGl0eSBpbiB0aGUgQXV0b25vbW91cyBEcml2aW5nIFNvZnR3YXJlIFN0YWNrXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE5LzA4LzI3LzE5MDY5NTkvMC9lbi9PcGVuQUR4LUJlY29tZXMtRWNsaXBzZS1Xb3JraW5nLUdyb3VwLUZvY3VzZWQtb24tSW50ZXJvcGVyYWJpbGl0eS1pbi10aGUtQXV0b25vbW91cy1Ecml2aW5nLVNvZnR3YXJlLVN0YWNrLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT3JpZ2luYWxseSBsYXVuY2hlZCBieSBCb3NjaCBhbmQgTWljcm9zb2Z0LCB0aGUgT3BlbkFEeCB3b3JraW5nIGdyb3VwIGNhbGxzIGZvciBwYXJ0aWNpcGF0aW9uIGZyb20gYXV0b21vdGl2ZSBpbmR1c3RyeSBPRU1zLCB0b29scyB2ZW5kb3JzLCBhbmQgZGV2ZWxvcGVyIGNvbW11bml0eV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDE3IFNlcCAyMDE5IDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtXZWxjb21lIHRvIHRoZSBGdXR1cmUgb2YgQ2xvdWQgTmF0aXZlIEphdmFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvd2VsY29tZS1mdXR1cmUtY2xvdWQtbmF0aXZlLWphdmFdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG9kYXksIHdpdGggdGhlIHJlbGVhc2Ugb2YgSmFrYXJ0YSBFRSA4LCB3ZSd2ZSBlbnRlcmVkIGEgbmV3IGVyYSBpbiBKYXZhIGlubm92YXRpb24hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMTAgU2VwIDIwMTkgMTE6MTA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGUgZm9yIEpha2FydGEgRUUgY29tbXVuaXR5OiBTZXB0ZW1iZXIgMjAxOV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGFuamEtb2JyYWRvdmljL3VwZGF0ZS1qYWthcnRhLWVlLWNvbW11bml0eS1zZXB0ZW1iZXItMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGVyZSdzIGEgbG90IGhhcHBlbmluZyBpbiB0aGUgSmFrYXJ0YSBFRSBlY29zeXN0ZW0gc28gaWYgeW91IHdhbnQgdG8gZ2V0IGEgcmljaGVyIGluc2lnaHQgaW50byBKYWthcnRhIEVFLCByZWFkIG9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDA5IFNlcCAyMDE5IDE1OjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbV2VsY29tZSBJdmFyIEdyaW1zdGFkIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvcGF1bC1idWNrL3dlbGNvbWUtaXZhcl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBhcmUgaGFwcHkgdG8gYW5ub3VuY2UgdGhhdCBlZmZlY3RpdmUgT2N0b2JlciAxc3QsIEl2YXIgR3JpbXN0YWQgd2lsbCBqb2luIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaW4gdGhlIHJvbGUgb2YgSmFrYXJ0YSBFRSBEZXZlbG9wZXIgQWR2b2NhdGUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMjYgQXVnIDIwMTkgMTE6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0pha2FydGEgTmV3c2xldHRlciBBdWd1c3QgMjAxOTogSmFrYXJ0YSBFRSA4IFByZXZpZXddXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2dhYnJpZWxhLW1vdHJvYy9qYWthcnRhLW5ld3NsZXR0ZXItYXVndXN0LTIwMTktamFrYXJ0YS1lZS04LXByZXZpZXddXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlcmUncyBhIGxvdCBoYXBwZW5pbmcgaW4gdGhlIEpha2FydGEgRUUgZWNvc3lzdGVtIHNvIGlmIHlvdSB3YW50IHRvIGdldCBhIHJpY2hlciBpbnNpZ2h0IGludG8gSmFrYXJ0YSBFRSwgcmVhZCBvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAyNiBBdWcgMjAxOSAxMTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtDb21tdW5pdHkgRGF5IGFuZCBDb21tdW5pdHkgRXZlbmluZyBhdCBFY2xpcHNlQ29uIEV1cm9wZSAyMDE5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9zdGVwaGFuaWUtc3dhcnQvY29tbXVuaXR5LWRheS1hbmQtY29tbXVuaXR5LWV2ZW5pbmctZWNsaXBzZWNvbi1ldXJvcGUtMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtMZWFybiBob3cgeW91IGNhbiBoZWxwIHVzIHBsYW4gQ29tbXVuaXR5IERheSBhbmQgdGhlIG5ldyBDb21tdW5pdHkgRXZlbmluZyB0aGlzIHllYXIgYXQgRWNsaXBzZUNvbiBFdXJvcGUhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDcgQXVnIDIwMTkgMTU6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1VwZGF0ZSBmb3IgSmFrYXJ0YSBFRSBjb21tdW5pdHk6IEF1Z3VzdCAyMDE5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvdXBkYXRlLWpha2FydGEtZWUtY29tbXVuaXR5LWF1Z3VzdC0yMDE5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZXJlJ3MgYSBsb3QgaGFwcGVuaW5nIGluIHRoZSBKYWthcnRhIEVFIGVjb3N5c3RlbSBzbyBpZiB5b3Ugd2FudCB0byBnZXQgYSByaWNoZXIgaW5zaWdodCBpbnRvIEpha2FydGEgRUUsIHJlYWQgb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDcgQXVnIDIwMTkgMTU6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciAtIEp1bHkgMjAxOTogUmVzZWFyY2hARWNsaXBzZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvZ2FicmllbGEtbW90cm9jL2VjbGlwc2UtbmV3c2xldHRlci1qdWx5LTIwMTktcmVzZWFyY2hlY2xpcHNlXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JlYWQgR2FicmllbGEgTW90cm9jJ3MgbGF0ZXN0IGJsb2cgb24gdGhlIEVjbGlwc2UgTmV3c2xldHRlcjogUmVzZWFyY2hARWNsaXBzZV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI2IEp1bCAyMDE5IDA4OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIGxhdGVzdCBFY2xpcHNlIE5ld3NsZXR0ZXIgaGFkIGJlZW4gcmVsZWFzZWQ6IFJlc2VhcmNoQEVjbGlwc2VdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE5L2p1bHkvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGFyZSB2ZXJ5IHByb3VkIHRvIG9mZmVyIHlvdSBhbiBpbnRyb2R1Y3Rpb24gdG8gbW9zdCBvZiB0aGUgcmVzZWFyY2ggcHJvamVjdHMgd2UncmUgaW52b2x2ZWQgaW4gYW5kIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjUgSnVsIDIwMTkgMDk6NDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtJbmR1c3RyaWFsLVNjYWxlIENvbGxhYm9yYXRpb24gZm9yIHRoZSBCdXNpbmVzcyBXaW5dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvaW5kdXN0cmlhbC1zY2FsZS1jb2xsYWJvcmF0aW9uLWJ1c2luZXNzLXdpbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUb2RheSwgd2UgYXJlIHRocmlsbGVkIHRvIHJlbGVhc2UgdGhlIEJ1c2luZXNzIG9mIE9wZW4gU291cmNlIGVCb29rIGZvY3VzZWQgb24gaG93IHN1Y2Nlc3NmdWwgZW50cmVwcmVuZXVycyBhcmUgbGV2ZXJhZ2luZyBhbGwgdGhhdCBvcGVuIHNvdXJjZSBoYXMgdG8gb2ZmZXIgdG8gZHJpdmUgZGlnaXRhbCBkaXNydXB0aW9uIHdpdGhpbiBidXNpbmVzcy1mcmllbmRseSBvcGVuIHNvdXJjZSBmb3VuZGF0aW9ucy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNiBKdWwgMjAxOSAxMDoxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0NvbW1lcmNpYWwtR3JhZGUgQ29sbGFib3JhdGlvbiBhdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9jb21tZXJjaWFsLWdyYWRlLWNvbGxhYm9yYXRpb24tZWNsaXBzZS1mb3VuZGF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlJ3ZlIGp1c3QgcmVsZWFzZWQgYSBCdXNpbmVzcyBvZiBPcGVuIFNvdXJjZSBlQm9vayB0aGF0IGlzIGVzc2VudGlhbCByZWFkaW5nIGZvciBsZWFkZXJzIGluIHRoZSBhZ2Ugb2YgZGlnaXRhbCBkaXNydXB0aW9uIHdobyBhcmUgY29uc2lkZXJpbmcgaG93IHRvIG1heGltaXplIHRoZWlyIHJldHVybnMgZnJvbSBvcGVuIHNvdXJjZSBwYXJ0aWNpcGF0aW9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDE2IEp1bCAyMDE5IDEwOjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGUgZm9yIEpha2FydGEgRUUgY29tbXVuaXR5OiBKdWx5IDIwMTldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RhbmphLW9icmFkb3ZpYy91cGRhdGUtamFrYXJ0YS1lZS1jb21tdW5pdHktanVseS0yMDE5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZXJlIGFyZSBhIGZldyB3YXlzIHRvIGdldCByaWNoZXIgaW5zaWdodCBpbnRvIHRoZSB3b3JrIHRoYXQgaGFzIGJlZW4gaW52ZXN0ZWQgaW4gSmFrYXJ0YSBFRSBzbyBmYXIsIHNvIGlmIHlvdSdkIGxpa2UgdG8gbGVhcm4gbW9yZSBhYm91dCBKYWthcnRhIEVFLXJlbGF0ZWQgcGxhbnMgYW5kIGdldCBpbnZvbHZlZCBpbiBzaGFwaW5nIHRoZSBmdXR1cmUgb2YgQ2xvdWQgTmF0aXZlIEphdmEsIHJlYWQgb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTUgSnVsIDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFYXJseS1CaXJkIFRhbGtzOiBBIFByZXZpZXcgb2YgV2hhdCdzIHRvIENvbWVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxOS9uZXdzL2Vhcmx5LWJpcmQtdGFsa3MtcHJldmlldy13aGF0cy1jb21lXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBjb21tdW5pdHkgcmVhbGx5IGNhbWUgdGhvdWdoIGZvciB0aGUgZWFybHktYmlyZCBkZWFkbGluZSB0aGlzIHllYXIuIFRoZSBwcm9ncmFtIGNvbW1pdHRlZSByZXZpZXdlZCBhIHJlY29yZCBudW1iZXIgb2YgdGFsa3MgKDE0NCkgdG8gY29tZSB1cCB3aXRoIGEgdG9wLXNpeCBsaXN0IV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDA1IEp1bCAyMDE5IDA4OjI1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgSW9UIE5ld3NsZXR0ZXIgaXMgb3V0IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL21haWxjaGkubXAvMTgzMjRkYzg4ZDY1L2VjbGlwc2UtaW90LW5ld3NsZXR0ZXItanVuZS0yMDE5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlbGNvbWUgdG8gdGhlIHNlY29uZCBpc3N1ZSBvZiB0aGUgRWNsaXBzZSBJb1QgTmV3c2xldHRlciBmb3IgMjAxOSwgYSBuZXdzbGV0dGVyIHRhaWxvcmVkIHRvIHNoYXJlIEVjbGlwc2UgSW9UIGNvbW11bml0eSBhbmQgaW5kdXN0cnkgbmV3cy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyNyBKdW4gMjAxOSAxMToyNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlcjogRmlyc3QgTG9vayBhdCBFY2xpcHNlIElERSAyMDE5LTA2XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxOS9qdW5lL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGlzIG1vbnRoIHRoZSBFY2xpcHNlIE5ld3NsZXR0ZXIgZmVhdHVyZXMgdGhlIEVjbGlwc2UgSURFIDIwMTktMDYsIHdoaWNoIGlzIG5vdyBhdmFpbGFibGUgZm9yIGRvd25sb2FkIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI3IEp1biAyMDE5IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIGlvRm9nOiBFdm9sdmluZyBUb3dhcmQgTmF0aXZlIEt1YmVybmV0ZXMgT3JjaGVzdHJhdGlvbiBhdCB0aGUgRWRnZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvbWlrZS1taWxpbmtvdmljaC9lY2xpcHNlLWlvZm9nLWV2b2x2aW5nLXRvd2FyZC1uYXRpdmUta3ViZXJuZXRlcy1vcmNoZXN0cmF0aW9uLWVkZ2VdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBleGNpdGVkIHRvIHN1cHBvcnQgdG9kYXkncyBhbm5vdW5jZW1lbnQgb2YgdGhlIGluaXRpYWwgYXZhaWxhYmlsaXR5IG9mIEVjbGlwc2UgaW9Gb2cgZmVhdHVyZXMgdGhhdCBtYWtlIGFueSBLdWJlcm5ldGVzIGRpc3RyaWJ1dGlvbiBlZGdlLWF3YXJlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI0IEp1biAyMDE5IDEzOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtCZWNvbWUgYSBTcG9uc29yIGF0IEVjbGlwc2VDb24gRXVyb3BlIDIwMTkhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9qYW1la2Etd29vZGJlcnJ5L2JlY29tZS1zcG9uc29yLWVjbGlwc2Vjb24tZXVyb3BlLTIwMTldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UncmUgZ2VhcmluZyB1cCBmb3IgRWNsaXBzZUNvbiBFdXJvcGUgMjAxOSwgb3VyIGJpZ2dlc3QgZXZlbnQgb2YgdGhlIHllYXIgd2hpY2ggYnJpbmdzIHRvZ2V0aGVyIGRldmVsb3BlcnMsIGFyY2hpdGVjdHMsIGFuZCBvcGVuIHNvdXJjZSBidXNpbmVzcyBsZWFkZXJzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDIxIEp1biAyMDE5IDExOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtVcGRhdGUgZm9yIEpha2FydGEgRUUgY29tbXVuaXR5OiBKdW5lIDIwMTldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RhbmphLW9icmFkb3ZpYy91cGRhdGUtamFrYXJ0YS1lZS1jb21tdW5pdHktanVuZS0yMDE5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0dldCB0aGUgbGF0ZXN0IG1vbnRobHkgZW1haWwgdXBkYXRlIG9uIHRoZSBKYWthcnRhIEVFIGNvbW11bml0eSBmcm9tIG5ld3MgaGlnaGxpZ2h0cyB0byB2YXJpb3VzIG1lZXRpbmdzIGFuZCBldmVudHMgcmVsYXRlZCB0byB0aGUgcGxhdGZvcm0hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjAgSnVuIDIwMTkgMTI6MDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgSW5kaXZpZHVhbCBDb21taXR0ZXIgQWdyZWVtZW50IDQuMCBVcGRhdGVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3NoYXJvbi1jb3JiZXR0L2VjbGlwc2UtaW5kaXZpZHVhbC1jb21taXR0ZXItYWdyZWVtZW50LTQwLXVwZGF0ZV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPbiBKdW5lIDEzdGgsIHdlIHJldGlyZWQgYWxsIHZlcnNpb25zIG9mIHRoZSAgRWNsaXBzZSBJbmRpdmlkdWFsIENvbW1pdHRlciBBZ3JlZW1lbnQgKElDQSkgcHJpb3IgdG8gdmVyc2lvbiA0LjAuIFVwZGF0ZSB5b3VycyB0b2RheSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxNyBKdW4gMjAxOSAwOTowNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbMjAxOSBBbm51YWwgRWNsaXBzZSBGb3VuZGF0aW9uIENvbW11bml0eSBSZXBvcnRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2ZvdW5kYXRpb24vcmVwb3J0cy9hbm51YWxfcmVwb3J0LnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtSZWFkIHRoZSBlaWdodGggYW5udWFsIEVjbGlwc2UgRm91bmRhdGlvbiBDb21tdW5pdHkgUmVwb3J0ISBDb21tZW50cyBhbmQgZmVlZGJhY2sgb24gdGhlIHN0eWxlIGFuZCBjb250ZW50IGFyZSB3ZWxjb21lIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDExIEp1biAyMDE5IDEzOjA1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtKYWthcnRhIE5ld3NsZXR0ZXIgTWF5IDIwMTk6IE9ud2FyZHMgYW5kIFVwd2FyZHMgZm9yIHRoZSBKYWthcnRhIENvbW11bml0eV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvZ2FicmllbGEtbW90cm9jL2pha2FydGEtbmV3c2xldHRlci1tYXktMjAxOS1vbndhcmRzLWFuZC11cHdhcmRzLWpha2FydGEtY29tbXVuaXR5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBlbGVjdGVkIHBvc2l0aW9ucyBhcmUgdG8gcmVwcmVzZW50IGVhY2ggb2YgdGhlIEVudGVycHJpc2UgTWVtYmVycywgUGFydGljaXBhbnQgTWVtYmVycywgYW5kIENvbW1pdHRlciBNZW1iZXJzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDA0IEp1biAyMDE5IDA4OjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWxlY3Rpb24gdGltZSBmb3IgSmFrYXJ0YSBFRSBXb3JraW5nIEdyb3VwIENvbW1pdHRlZXMhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvZWxlY3Rpb24tdGltZS1qYWthcnRhLWVlLXdvcmtpbmctZ3JvdXAtY29tbWl0dGVlc11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgZWxlY3RlZCBwb3NpdGlvbnMgYXJlIHRvIHJlcHJlc2VudCBlYWNoIG9mIHRoZSBFbnRlcnByaXNlIE1lbWJlcnMsIFBhcnRpY2lwYW50IE1lbWJlcnMsIGFuZCBDb21taXR0ZXIgTWVtYmVycy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyOCBNYXkgMjAxOSAxMToxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBFdXJvcGUgMjAxOTogQ2FsbCBmb3IgUGFwZXJzIG9wZW4gdW50aWwgSnVseSAxNSAtIFN1Ym1pdCBhIHRhbGsgdG9kYXkhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9qYW1la2Etd29vZGJlcnJ5L2VjbGlwc2Vjb24tZXVyb3BlLTIwMTktY2FsbC1wYXBlcnMtb3Blbi11bnRpbC1qdWx5LTE1LXN1Ym1pdC10YWxrLXRvZGF5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1N1Ym1pdCB5b3VyIHByb3Bvc2FscyB0byBiZSBwYXJ0IG9mIEVDRSdzIDIwMTkgc3BlYWtlciBsaW5ldXAuIFRoZSBjb25mZXJlbmNlIGlzIGluIEx1ZHdpZ3NidXJnLCBHZXJtYW55IE9jdCAyMS0yNCwgMjAxOV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI4IE1heSAyMDE5IDExOjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtTdGF0ZW1lbnQgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBvbiBIdWF3ZWkgRW50aXR5IExpc3QgUnVsaW5nXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxOTA1MjctRUFSLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPcGVuIFNvdXJjZSBwcm9qZWN0cyBpbnZvbHZpbmcgZW5jcnlwdGlvbiBzb2Z0d2FyZSBzb3VyY2UgY29kZSBhcmUgc3RpbGwgcmVxdWlyZWQgdG8gc2VuZCBhIG5vdGljZSBvZiB0aGUgVVJMIHRvIEJJUyBhbmQgTlNBIHRvIHNhdGlzZnkgdGhlICJwdWJsaWNseSBhdmFpbGFibGUiIG5vdGljZSByZXF1aXJlbWVudCBpbiBFQVIgJnNlY3Q7IDc0Mi4xNShiKV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI3IE1heSAyMDE5IDA5OjE1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtJbmR1c3RyeSBsZWFkZXJzIFJlZCBIYXQsIEV1cm90ZWNoLCBhbmQgQ2xvdWRlcmEgam9pbiBmb3JjZXMgYXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvamFtZWthLXdvb2RiZXJyeS9pbmR1c3RyeS1sZWFkZXJzLXJlZC1oYXQtZXVyb3RlY2gtYW5kLWNsb3VkZXJhLWpvaW4tZm9yY2VzLWVjbGlwc2UtZm91bmRhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtJbmR1c3RyeSBsZWFkZXJzIFJlZCBIYXQsIEV1cm90ZWNoIGFuZCBDbG91ZGVyYSB0dXJuZWQgdG8gdGhlIEVjbGlwc2UgSW9UIFdvcmtpbmcgR3JvdXAgdG8gb3ZlcmNvbWUgY29tbW9uIGNoYWxsZW5nZXMgYW5kIHByb3ZpZGUgdGhlaXIgY3VzdG9tZXJzIHdpdGggYW4gZW5kLXRvLWVuZCBJb1Qgc29sdXRpb24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMjcgTWF5IDIwMTkgMDg6NDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VDRSAyMDE5OiBDRlAgTm93IE9wZW4hXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9lY2UtMjAxOS1jZnAtbm93LW9wZW5dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVDRSAyMDE5IENhbGwgZm9yIFBhcGVycyBpcyBub3cgb3Blbi4gVGhlIGVhcmx5LWJpcmQgZGVhZGxpbmUgaXMgSnVseSAxIGFuZCBmaW5hbCBzdWJtaXNzaW9uIGlzIEp1bHkgMTUuIF1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDIxIE1heSAyMDE5IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ2xvdWQgTmF0aXZlIEphdmEgSW5ub3ZhdGlvbiBhdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS9jbG91ZC1uYXRpdmUtamF2YS1pbm5vdmF0aW9uLWVjbGlwc2UtZm91bmRhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgd29ybGQncyBsZWFkaW5nIHRlY2hub2xvZ3kgdmVuZG9ycywgaW5jbHVkaW5nIEZ1aml0c3UsIElCTSwgTWljcm9zb2Z0LCBPcmFjbGUsIFJlZCBIYXQsIFNBUCwgYW5kIFRvbWl0cmliZSwgYXJlIGNvbGxhYm9yYXRpbmcgYXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBhZHZhbmNlIGVudGVycHJpc2UgSmF2YSB0ZWNobm9sb2dpZXMgdG8gc3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIG1pc3Npb24tY3JpdGljYWwgYXBwbGljYXRpb25zIHRvIHRoZSBjbG91ZC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMSBNYXkgMjAxOSAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1VwZGF0ZSBmb3IgSmFrYXJ0YSBFRSBjb21tdW5pdHk6IE1heSAyMDE5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvdXBkYXRlLWpha2FydGEtZWUtY29tbXVuaXR5LW1heS0yMDE5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0FjdGl2ZSBwYXJ0aWNpcGF0aW9uIHJlcHJlc2VudHMgdGhlIGJlc3Qgd2F5IHRvIGRyaXZlIHRoZSB2ZW5kb3ItbmV1dHJhbCBhbmQgcmFwaWQgaW5ub3ZhdGlvbiBuZWNlc3NhcnkgdG8gbW9kZXJuaXplIGVudGVycHJpc2Ugc3lzdGVtcyBmb3IgY2xvdWQgdXNlIGNhc2VzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDIxIE1heSAyMDE5IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gTGF1bmNoZXMgb3Blbk1vYmlsaXR5IFdvcmtpbmcgR3JvdXBdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDUvMTMvMTgyMjM2NC8wL2VuL0VjbGlwc2UtRm91bmRhdGlvbi1MYXVuY2hlcy1vcGVuTW9iaWxpdHktV29ya2luZy1Hcm91cC5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RvZGF5IHdlIGFubm91bmNlZCB0aGUgbGF1bmNoIG9mIHRoZSBvcGVuTW9iaWxpdHkgV29ya2luZyBHcm91cCB0aGF0IHdpbGwgZm9jdXMgb24gb3BlbiBhbmQgc2hhcmVkIGNvbGxhYm9yYXRpb24gYXJvdW5kIG9uZSBvZiB0aGUgbWFqb3IgaXNzdWVzIGluIHVyYmFuIHBsYW5uaW5nIGFyb3VuZCBhdXRvbm9tb3VzIHZlaGljbGVzIGFuZCBmdXR1cmUgdHJhbnNwb3J0YXRpb24gcmVxdWlyZW1lbnRzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDEzIE1heSAyMDE5IDE3OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtOZXcgRWNsaXBzZSBGb3VuZGF0aW9uIENvbW11bml0eSBTdXJ2ZXkgb2YgSmF2YSBEZXZlbG9wZXJzIFNob3dzIENsb3VkIE5hdGl2ZSBBZG9wdGlvbiBBY2NlbGVyYXRpbmcgRHJhbWF0aWNhbGx5IHdpdGggSmFrYXJ0YSBFRV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOS8wNS8wOS8xODIwOTUyLzAvZW4vTmV3LUVjbGlwc2UtRm91bmRhdGlvbi1Db21tdW5pdHktU3VydmV5LW9mLUphdmEtRGV2ZWxvcGVycy1TaG93cy1DbG91ZC1OYXRpdmUtQWRvcHRpb24tQWNjZWxlcmF0aW5nLURyYW1hdGljYWxseS13aXRoLUpha2FydGEtRUUuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gZW50ZXJwcmlzZSBKYXZhIHN1cnZleSBzaG93cyBjbG91ZCBkZXBsb3ltZW50cyBpbmNyZWFzaW5nIG92ZXIgMjAxOCBmaW5kaW5ncyB3aXRoIDYyJSBvZiBKYXZhIGRldmVsb3BlcnMgYnVpbGRpbmcgY2xvdWQgbmF0aXZlIGFyY2hpdGVjdHVyZXMgbm93IG9yIHdpdGhpbiB0aGUgeWVhcl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDA5IE1heSAyMDE5IDE0OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhlIENsb3VkIE5hdGl2ZSBJbXBlcmF0aXZlIC0gUmVzdWx0cyBmcm9tIHRoZSAyMDE5IEpha2FydGEgRUUgRGV2ZWxvcGVyIFN1cnZleV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvbWlrZS1taWxpbmtvdmljaC9jbG91ZC1uYXRpdmUtaW1wZXJhdGl2ZS0lRTIlODAlOTQtcmVzdWx0cy0yMDE5LWpha2FydGEtZWUtZGV2ZWxvcGVyLXN1cnZleV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgcmVzdWx0cyBvZiB0aGUgMjAxOSBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXkgYXJlIG91dC4gQWxtb3N0IDEsODAwIEphdmEgZGV2ZWxvcGVycyBmcm9tIGFyb3VuZCB0aGUgd29ybGQgaGF2ZSBzcG9rZW4uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMTAgTWF5IDIwMTkgMTQ6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIEFib3V0IEpha2FydGEgRUUgOF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvbWlrZS1taWxpbmtvdmljaC9mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy1hYm91dC1qYWthcnRhLWVlLThdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSGF2ZSBxdWVzdGlvbnMgYWJvdXQgSmFrYXJ0YSBFRSA4PyBDaGVjayBvdXQgTWlrZSBNaWxpbmtvdmljaCdzIG5ld2VzdCBGQVEgYmxvZyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAwOCBNYXkgMjAxOSAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgQ29udHJpYnV0b3IgQWdyZWVtZW50IDMuMF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3Qvd2F5bmUtYmVhdG9uL2VjbGlwc2UtY29udHJpYnV0b3ItYWdyZWVtZW50LTMwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24ncyBJUCBUZWFtIGhhcyBiZWVuIHdvcmtpbmcgaGFyZCB0byBnZXQgdGhlIHZhcmlvdXMgYWdyZWVtZW50cyB0aGF0IHdlIG1haW50YWluIGJldHdlZW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBhbmQgY29tbXVuaXR5IHVwZGF0ZWQuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDggTWF5IDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1VwZGF0ZSBvbiBKYWthcnRhIEVFIFJpZ2h0cyB0byBKYXZhIFRyYWRlbWFya3NdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvdXBkYXRlLWpha2FydGEtZWUtcmlnaHRzLWphdmEtdHJhZGVtYXJrc11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTdW1tYXJ5IG9mIHByb2dyZXNzIHRvIGRhdGUgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gRWNsaXBzZSBhbmQgT3JhY2xlIG9uIEpha2FydGEgRUUgYW5kIHVzZSBvZiBKYXZhIHRyYWRlbWFya3MgYW5kIHRoZSBqYXZheCBuYW1lc3BhY2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMDMgTWF5IDIwMTkgMTU6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBvbiB0aGUgbW92ZSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvZWNsaXBzZS1mb3VuZGF0aW9uLW1vdmVdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQWZ0ZXIgMTUgeWVhcnMgYXQgMTAyIENlbnRyZXBvaW50ZSBEcml2ZSBpbiBPdHRhd2EsIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgb24gdGhlIG1vdmUhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjUgQXByIDIwMTkgMTU6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgMjAxOSBJb1QgRGV2ZWxvcGVyIFN1cnZleSBSZXN1bHRzIGFyZSBMaXZlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9taWtlLW1pbGlua292aWNoLzIwMTktaW90LWRldmVsb3Blci1zdXJ2ZXktcmVzdWx0cy1hcmUtbGl2ZV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGlzIHllYXIgbWFya3MgdGhlIGZpZnRoIHllYXIgdGhlIEVjbGlwc2UgSW9UIFdvcmtpbmcgR3JvdXAgaGFzIGFza2VkIHRoZSBnbG9iYWwgSW9UIGRldmVsb3BlciBjb21tdW5pdHkgdG8gc2hhcmUgdGhlaXIgcGVyY2VwdGlvbnMsIHJlcXVpcmVtZW50cywgYW5kIHByaW9yaXRpZXMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTcgQXByIDIwMTkgMDg6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtOZXcgU3VydmV5IG9mIE1vcmUgVGhhbiAxLDcwMCBJb1QgRGV2ZWxvcGVycyBSZXZlYWxzIFRvcCBIYXJkd2FyZSwgU29mdHdhcmUgIlN0YWNrIiBDaG9pY2VzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHA6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDQvMTcvMTgwNTMxOC8wL2VuL05ldy1TdXJ2ZXktb2YtTW9yZS1UaGFuLTEtNzAwLUlvVC1EZXZlbG9wZXJzLVJldmVhbHMtVG9wLUhhcmR3YXJlLVNvZnR3YXJlLVN0YWNrLUNob2ljZXMuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUb2RheSwgd2UgcmVsZWFzZWQgdGhlIDIwMTkgSW9UIERldmVsb3BlciBTdXJ2ZXkgcmVzdWx0cyB0aGF0IGNhbnZhc3NlZCBtb3JlIHRoYW4gMSw3MDAgZGV2ZWxvcGVycyBhYm91dCB0aGVpciBJb1QgZWZmb3J0cyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxNyBBcHIgMjAxOSAwODo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1JlbmFtaW5nIEphdmEgRUUgU3BlY2lmaWNhdGlvbnMgZm9yIEpha2FydGEgRUVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9yZW5hbWluZy1qYXZhLWVlLXNwZWNpZmljYXRpb25zLWpha2FydGEtZWVdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQXMgd2UgcHJlcGFyZSB0byBlbmdhZ2UgaW4gYWN0dWFsIHNwZWNpZmljYXRpb24gd29yaywgaXQncyB0aW1lIHRvIHN0YXJ0IHRoaW5raW5nIGFib3V0IGNoYW5naW5nIHRoZSBuYW1lcyBvZiB0aGUgc3BlY2lmaWNhdGlvbnMgYW5kIHRoZSBwcm9qZWN0cyB0aGF0IGNvbnRhaW4gdGhlaXIgYXJ0aWZhY3RzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDA1IEFwciAyMDE5IDA3OjQwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSG93IHRvIHBhcnRpY2lwYXRlIGluIGFkdmFuY2luZyBKYWthcnRhIEVFIFNwZWNpZmljYXRpb246IFRlY2huaWNhbCBhbmQgQ29sbGF0ZXJhbCBtYXRlcmlhbCByZWxhdGVkIHdvcmtdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RhbmphLW9icmFkb3ZpYy9ob3ctcGFydGljaXBhdGUtYWR2YW5jaW5nLWpha2FydGEtZWUtc3BlY2lmaWNhdGlvbi10ZWNobmljYWwtYW5kLWNvbGxhdGVyYWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgaGF2ZSBoZWFyZCBmcm9tIG1lbWJlcnMgb2YgdGhlIGNvbW11bml0eSBzb21lIHN1Z2dlc3Rpb25zIG9uIHdoYXQgdGhleSBuZWVkIGZyb20gdGhlIHNwZWNpZmljYXRpb24sIGJ1dCB3ZSBjYW4gYWx3YXlzIHVzZSBtb3JlIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDA1IEFwciAyMDE5IDA3OjQwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtXZWxjb21lIEdhYnJpZWxhIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3Uvd2VsY29tZS1nYWJyaWVsYV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSdkIGxpa2UgdG8gd2VsY29tZSBHYWJyaWVsYSBNb3Ryb2MgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBhcyBhIENvbnRlbnQgTWFya2V0aW5nIFNwZWNpYWxpc3QgYmFzZWQgaW4gR2VybWFueSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwMSBBcHIgMjAxOSAwOTo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhhbmsgWW91IGZvciBUYWtpbmcgdGhlIEpha2FydGEgRUUgMjAxOSBEZXZlbG9wZXIgU3VydmV5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvdGhhbmsteW91LXRha2luZy1qYWthcnRhLWVlLTIwMTktZGV2ZWxvcGVyLXN1cnZleV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgc3VydmV5IHdyYXBwZWQgdXAgYXQgbWlkbmlnaHQgb24gTW9uZGF5LCBNYXJjaCAyNSwgd2l0aCBvdmVyIDEsNzcwIHJlc3BvbnNlcyBmcm9tIGRldmVsb3BlcnMgYXJvdW5kIHRoZSBnbG9iZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwMSBBcHIgMjAxOSAwODo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0luY3ViYXRpb24gaW4gdGhlIEVjbGlwc2UgRGV2ZWxvcG1lbnQgUHJvY2Vzc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3Qvd2F5bmUtYmVhdG9uL2luY3ViYXRpb24tZWNsaXBzZS1kZXZlbG9wbWVudC1wcm9jZXNzXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIERldmVsb3BtZW50IFByb2Nlc3MgaGFzIGEgbm90aW9uIG9mIHBoYXNlcy4gVHdvIG9mIHRob3NlIHBoYXNlcyBhcmUgSW5jdWJhdGlvbiBhbmQgTWF0dXJlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDE1IE1hciAyMDE5IDE1OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGF0J3MgQSBXcmFwLCBGb2xrcyEgVGhhbmsgWW91IGZvciBQYXJ0aWNpcGF0aW5nIGluIE91ciAyMDE5IElvVCBEZXZlbG9wZXIgU3VydmV5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvamFtZWthLXdvb2RiZXJyeS90aGF0cy13cmFwLWZvbGtzLXRoYW5rLXlvdS1wYXJ0aWNpcGF0aW5nLW91ci0yMDE5LWlvdC1kZXZlbG9wZXItc3VydmV5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGFyZSBwcm91ZCB0byBhbm5vdW5jZSB0aGF0IG91ciAyMDE5IElvVCBEZXZlbG9wZXIgU3VydmV5LCBvcmdhbml6ZWQgYnkgdGhlIEVjbGlwc2UgSW9UIFdvcmtpbmcgR3JvdXAsIHdhcyBhIGh1Z2Ugc3VjY2VzcyB3aXRoIG92ZXIgMSw3MDAgcmVzcG9uc2VzIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDExIE1hciAyMDE5IDEzOjQwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gU3BlY2lmaWNhdGlvbiBQcm9jZXNzIFN0ZXAtYnktU3RlcF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3Qvd2F5bmUtYmVhdG9uL2VjbGlwc2UtZm91bmRhdGlvbi1zcGVjaWZpY2F0aW9uLXByb2Nlc3Mtc3RlcC1zdGVwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gU3BlY2lmaWNhdGlvbiBQcm9jZXNzIChFRlNQKSBwcm92aWRlcyBhIGZyYW1ld29yayBhbmQgZ292ZXJuYW5jZSBtb2RlbCBmb3IgZGV2ZWxvcGVycyBlbmdhZ2VkIGluIHRoZSBwcm9jZXNzIG9mIGRldmVsb3Bpbmcgc3BlY2lmaWNhdGlvbnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMDggTWFyIDIwMTkgMTM6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBCb2FyZCBFbGVjdGlvbiBSZXN1bHRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTkwMzA1LWJvYXJkZWxlY3Rpb24ucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1NlZSB0aGUgcmVzdWx0cyBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIFN1c3RhaW5pbmcgTWVtYmVyIGFuZCBDb21taXR0ZXIgTWVtYmVyIGVsZWN0aW9ucyBmb3IgcmVwcmVzZW50YXRpdmVzIHRvIG91ciBCb2FyZCBvZiBEaXJlY3RvcnMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDYgTWFyIDIwMTkgMTA6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUaGUgMjAxOSBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXkgaXMgdW5kZXJ3YXkhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC9wYXVsLWJ1Y2svMjAxOS1qYWthcnRhLWVlLWRldmVsb3Blci1zdXJ2ZXktdW5kZXJ3YXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEpha2FydGEgRUUgV29ya2luZyBHcm91cCBpcyBsYXVuY2hpbmcgdGhlIEpha2FydGEgRUUgRGV2ZWxvcGVyIFN1cnZleSBmb3IgMjAxOSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwNSBNYXIgMjAxOSAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSmFrYXJ0YSBFRSAtIFdoYXQncyBOZXcgaW4gMjAxOT9dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE5L2ZlYnJ1YXJ5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtDaGVjayBvdXQgd2hhdCdzIG5ldyBpbiAyMDE5IGZvciBKYWthcnRhIEVFIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDA0IE1hciAyMDE5IDA4OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIElvVCBSZWFjaGVzIE5ldyBNaWxlc3RvbmVzIGluIE9wZW4gU291cmNlIElvVCBMZWFkZXJzaGlwXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTkvMDIvMjYvMTc0MjI3Mi8wL2VuL0VjbGlwc2UtSW9ULVJlYWNoZXMtTmV3LU1pbGVzdG9uZXMtaW4tT3Blbi1Tb3VyY2UtSW9ULUxlYWRlcnNoaXAuaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtFY2xpcHNlIElvVCByZWFjaGVzIHRocmVlIG1pbGxpb24gbGluZXMgb2YgY29kZSwgNDEgbWVtYmVyIGNvbXBhbmllcywgMzcgSW9UIHByb2plY3RzLCBhbmQgMzUwIGNvbnRyaWJ1dG9ycyAtIGJyaW5naW5nIElvVCBsZWFkZXJzIHRvZ2V0aGVyIHRvIHN0YW5kYXJkaXplIG9wZW4gYXJjaGl0ZWN0dXJlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDI2IEZlYiAyMDE5IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtQYXJ0aWNpcGF0ZSBpbiB0aGUgMjAxOSBJb1QgRGV2ZWxvcGVyIFN1cnZleSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3BhcnRpY2lwYXRlLTIwMTktaW90LWRldmVsb3Blci1zdXJ2ZXldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgSW9UIFdvcmtpbmcgR3JvdXAgaXMgcGxlYXNlZCB0byBsYXVuY2ggdGhlIDIwMTkgSW9UIERldmVsb3BlciBTdXJ2ZXkgYW5kIHdlIHdhbnQgdG8gaGVhciBmcm9tIHlvdSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMSBGZWIgMjAxOSAxMDoxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIC0gRWRpdG9yaWFsIENhbGVuZGFyIDIwMTldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2phbWVrYS13b29kYmVycnkvZWNsaXBzZS1uZXdzbGV0dGVyLSVFMiU4MCU5NC1lZGl0b3JpYWwtY2FsZW5kYXItMjAxOV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPdXIgZ29hbCB3aXRoIHRoZSBuZXdzbGV0dGVyIGlzIHRvIGRlbGl2ZXIgZ3JlYXQgY29udGVudCB0aGF0IGVkdWNhdGVzLCBtb3RpdmF0ZXMsIGFuZCBpbnNwaXJlcyBvdXIgY29tbXVuaXR5IV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDExIEZlYiAyMDE5IDEwOjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtPcGVuIFNvdXJjZTogQ2FuIHlvdSBhZmZvcmQgbm90IHRvIGdldCBpbnZvbHZlZD9dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L29wZW4tc291cmNlLWNhbi15b3UtYWZmb3JkLW5vdC1nZXQtaW52b2x2ZWRdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG8gc2F5IHRoYXQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBpcyBvbiBhIHJvbGwgd291bGQgYmUgYW4gdW5kZXJzdGF0ZW1lbnQuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMDcgRmViIDIwMTkgMDg6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbjogMTUgWWVhcnMgWW91bmddXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvZWNsaXBzZS1mb3VuZGF0aW9uLTE1LXllYXJzLXlvdW5nXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1NhdHVyZGF5LCBGZWJydWFyeSAyLCAyMDE5IG1hcmtzIHRoZSAxNXRoIGJpcnRoZGF5IG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24uIFRoYXQgd2FzIHRoZSBkYXkgdGhhdCBpdCB3YXMgcHVibGljbHkgYW5kIG9mZmljaWFsbHkgYW5ub3VuY2VkLCBhbmQgdGhlIG9wZW5pbmcgZGF5IG9mIHRoZSBmaXJzdCBldmVyIEVjbGlwc2VDb24gY29uZmVyZW5jZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAwMSBGZWIgMjAxOSAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0pha2FydGFibG9ncy5lZSBpcyBMaXZlISBQUzogQmxvZ2dlcnMsIFdlIE5lZWQgWW91IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvamFrYXJ0YWJsb2dzZWUtbGl2ZS1wcy1ibG9nZ2Vycy13ZS1uZWVkLXlvdV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtKYWthcnRhYmxvZ3MuZWUgaXMgdGhlIG5ldyBibG9nIGhvbWUgZm9yIG91ciBnbG9iYWwgY29tbXVuaXR5IHRvIHN0YXkgdXAgdG8gZGF0ZSBvbiB0aGUgbGF0ZXN0IEpha2FydGEgRUUgbmV3cywgdGVjaG5vbG9naWVzLCBiZXN0IHByYWN0aWNlcywgYW5kIG1vcmUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjkgSmFuIDIwMTkgMTU6MjA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgU3BlY2lmaWNhdGlvbiBQcm9jZXNzIElWOiBUaGUgU3BlY2lmaWNhdGlvbiBDb21taXR0ZWUgVm90ZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9lY2xpcHNlLXNwZWNpZmljYXRpb24tcHJvY2Vzcy1pdi1zcGVjaWZpY2F0aW9uLWNvbW1pdHRlZS12b3Rlc11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPbmUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiBFY2xpcHNlIG9wZW4gc291cmNlIHNvZnR3YXJlIHByb2plY3RzIGFuZCBvcGVuIHNvdXJjZSBzcGVjaWZpY2F0aW9uIHByb2plY3RzIGlzIHRoYXQgc3BlY2lmaWNhdGlvbiBwcm9qZWN0cyBtdXN0IGJlIGFsaWduZWQgd2l0aCBleGFjdGx5IG9uZSBzcGVjaWZpY2F0aW9uIGNvbW1pdHRlZV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDIxIEphbiAyMDE5IDE0OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUcmFkaXN0YSBKb2lucyBFY2xpcHNlIEZvdW5kYXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOS8wMS8xMC8xNjg1OTg4LzAvZW4vVHJhZGlzdGEtSm9pbnMtRWNsaXBzZS1Gb3VuZGF0aW9uLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVHJhZGlzdGEgd2lsbCBjb250cmlidXRlIHRvIHRoZSBKYWthcnRhIEVFIHByb2plY3QsIGJyaW5naW5nIGl0cyBsb25nIGV4cGVyaWVuY2UgaW4gdGhlIEphdmEgRUUgcGxhdGZvcm0gYXBwbGllZCB0byB0aGUgZmluYW5jaWFsIHNlY3Rvci5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxMCBKYW4gMjAxOSAwODozNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBEZXZlbG9wbWVudCBQcm9jZXNzIDIwMThdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9lY2xpcHNlLWRldmVsb3BtZW50LXByb2Nlc3MtMjAxOF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtJbiBEZWNlbWJlciA3LzIwMTgsIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24ncyBCb2FyZCBvZiBEaXJlY3RvcnMgYXBwcm92ZWQgYSBuZXcgZWRpdGlvbiBvZiB0aGUgRWNsaXBzZSBEZXZlbG9wbWVudCBQcm9jZXNzIChFRFApIHdoaWNoIGludHJvZHVjZXMgb25lIHBhcnRpY3VsYXJseSBzaWduaWZpY2FudCBjaGFuZ2UsIGFsb25nIHdpdGggYSBzbWFsbCBudW1iZXIgb2Ygb3RoZXIgdXNlZnVsIGNoYW5nZXMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTkgRGVjIDIwMTggMDk6MzU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBEcml2ZXMgJDkgQmlsbGlvbiBpbiBPcGVuIFNvdXJjZSBJbm5vdmF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTgvMTIvMTgvMTY2ODU3Ni8wL2VuL0VjbGlwc2UtRm91bmRhdGlvbi1Ecml2ZXMtOS1CaWxsaW9uLWluLU9wZW4tU291cmNlLUlubm92YXRpb24uaHRtbF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtHbG9iYWwgb3BlbiBzb3VyY2UgZm91bmRhdGlvbiBmaW5pc2hlcyAyMDE4IHdpdGggMzYwKyBvcGVuIHNvdXJjZSBwcm9qZWN0cywgMTYyKyBtaWxsaW9uIGxpbmVzIG9mIGNvZGUgd3JpdHRlbiBhbmQgbW9yZSB0aGFuIDI3NSBzcG9uc29yIG1lbWJlcnNdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxOSBEZWMgMjAxOCAwOTozNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+ICAgIAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1JlYWQgdGhlIG5ld2VzdCBKYWthcnRhIEVFIE5ld3NsZXR0ZXIhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxOC9ub3ZlbWJlci9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhpcyBtb250aCB3ZSBicmluZyB5b3UgYSBmdWxseSBsb2FkZWQgSmFrYXJ0YSBFRSBuZXdzbGV0dGVyIHdpdGggYSBtaXggb2YgdGVjaG5pY2FsIGNvbnRlbnQsIGNvbW11bml0eSBuZXdzLCBhbmQgYSB0dXRvcmlhbCFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAzMCBOb3YgMjAxOCAwOToxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcywgUGFydCBJSUk6IENyZWF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC93YXluZS1iZWF0b24vZWNsaXBzZS1mb3VuZGF0aW9uLXNwZWNpZmljYXRpb24tcHJvY2Vzcy1wYXJ0LWlpaS1jcmVhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtDcmVhdGlvbicgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2Vzcy4gUmVhZCBXYXluZSBCZWF0b24ncyBuZXdlc3QgYmxvZyBvbiB0aGUgdG9waWMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMzAgTm92IDIwMTggMDk6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0hvdyBpcyB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcyAoRUZTUCkgZGlmZmVyZW50IGZyb20gSmF2YSBDb21tdW5pdHkgUHJvY2VzcyAoSkNQKT9dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RhbmphLW9icmFkb3ZpYy9ob3ctZWNsaXBzZS1mb3VuZGF0aW9uLXNwZWNpZmljYXRpb24tcHJvY2Vzcy1lZnNwLWRpZmZlcmVudC1qYXZhLWNvbW11bml0eV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGVyZSBhcmUgbWFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVjbGlwc2UgRm91bmRhdGlvbiBTcGVjaWZpY2F0aW9uIFByb2Nlc3MgKEVGU1ApIGFuZCBKYXZhIENvbW11bml0eSBQcm9jZXNzIChKQ1ApLCBsZXQncyBmb2N1cyBvbiBteSB0b3AgNSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyNyBOb3YgMjAxOCAxMjoxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcywgUGFydCBJSTogdGhlIEVGU1BdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3dheW5lLWJlYXRvbi9lY2xpcHNlLWZvdW5kYXRpb24tc3BlY2lmaWNhdGlvbi1wcm9jZXNzLXBhcnQtaWktZWZzcF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcyBkZWZpbmVzIGEgZ2VuZXJhbCBmcmFtZXdvcmsgZm9yIGRldmVsb3Bpbmcgc3BlY2lmaWNhdGlvbnMgaW4gb3BlbiBzb3VyY2UgYXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyNyBOb3YgMjAxOCAxMjoxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFNwZWNpZmljYXRpb24gUHJvY2VzcywgUGFydCBJOiBUaGUgRURQXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC93YXluZS1iZWF0b24vZWNsaXBzZS1mb3VuZGF0aW9uLXNwZWNpZmljYXRpb24tcHJvY2Vzcy1wYXJ0LWktZWRwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0EgcXVpY2sgRWNsaXBzZSBEZXZlbG9wbWVudCBQcm9jZXNzIChFRFApIHByaW1lci5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAwOCBOb3YgMjAxOCAxMToxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIEhvc3RlZCBTZXJ2aWNlcyBQcml2YWN5IGFuZCBBY2NlcHRhYmxlIFVzYWdlIFBvbGljeV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvY2hyaXN0b3BoZXItZ3VpbmRvbi9lY2xpcHNlLWZvdW5kYXRpb24taG9zdGVkLXNlcnZpY2VzLXByaXZhY3ktYW5kLWFjY2VwdGFibGUtdXNhZ2UtcG9saWN5XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gcmVjZW50bHkgbWFkZSBhdmFpbGFibGUgYSBuZXcgcG9saWN5IHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBwcm9qZWN0cyBhbmQgaG9zdGVkIHNlcnZpY2VzIGFyZSBjb21wbGlhbnQgd2l0aCB0aGUgR2VuZXJhbCBEYXRhIFByb3RlY3Rpb24gUmVndWxhdGlvbiAoR0RQUikuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMDggTm92IDIwMTggMTE6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBVcGRhdGluZyBDb250cmlidXRvciBhbmQgQ29tbWl0dGVyIEFncmVlbWVudHNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L21pa2UtbWlsaW5rb3ZpY2gvbmV3LWVjbGlwc2UtZm91bmRhdGlvbi1jb21taXR0ZXItYW5kLWNvbnRyaWJ1dG9yLWFncmVlbWVudHNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU2VlIE1pa2UgTWlsaW5rb3ZpY2gncyBibG9nIGV4cGxhaW5pbmcgdGhlIHVwY29taW5nIGNoYW5nZXMgdG8gdGhlc2UgYWdyZWVtZW50cyBhbmQgd2hhdCBzdGVwcyBhcmUgYmVpbmcgdGFrZW4gdG8gaW1wbGVtZW50IHRoZSB1cGRhdGVdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwNSBOb3YgMjAxOCAxNDoxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFB1Ymxpc2hlcyBNaWNyb1Byb2ZpbGUgZUJvb2tdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL2dsb2JlbmV3c3dpcmUuY2EvbmV3cy1yZWxlYXNlLzIwMTgvMTEvMDUvMTY0NDkxMy8wL2VuL0VjbGlwc2UtRm91bmRhdGlvbi1QdWJsaXNoZXMtTWljcm9Qcm9maWxlLWVCb29rLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbMTUgcGFnZSBleGVjdXRpdmUgZ3VpZGUgc2V0cyBjb250ZXh0IGZvciBlbnRlcnByaXNlcyBldmFsdWF0aW5nIE1pY3JvUHJvZmlsZSAmIGVudGVycHJpc2UgSmF2YSBtaWNyb3NlcnZpY2VzIGZvciBkaWdpdGFsIHRyYW5zZm9ybWF0aW9uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMDUgTm92IDIwMTggMTE6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1BhcnRpY2lwYXRlIGluIHRoZSAyMDE4IEVjbGlwc2UgRm91bmRhdGlvbiBCcmFuZCBTdXJ2ZXldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3BhcnRpY2lwYXRlLTIwMTgtZWNsaXBzZS1mb3VuZGF0aW9uLWJyYW5kLXN1cnZleV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSBhcmUgZXhjaXRlZCB0byBsYXVuY2ggdGhlIDIwMTggZWRpdGlvbiBvZiBvdXIgYnJhbmQgc3VydmV5IV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDA1IE5vdiAyMDE4IDEwOjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ2FzZSBTdHVkeTogSG93IEJvc2NoIElzIFN1Y2NlZWRpbmcgd2l0aCBPcGVuIFNvdXJjZSBhdCBFY2xpcHNlIElvVF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL21taWxpbmtvdi53b3JkcHJlc3MuY29tLzIwMTgvMTAvMDIvaG93LWJvc2NoLWlzLXN1Y2NlZWRpbmctd2l0aC1vcGVuLXNvdXJjZS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSG93IGlzIGl0IHRoYXQgYSAxNTAteWVhci1vbGQsIDQwMCwwMDAgZW1wbG95ZWUgaW5kdXN0cmlhbCBjb25nbG9tZXJhdGUgaXMgY29tcGV0aW5nIGFuZCB3aW5uaW5nIGluIHRoZSByYXBpZGx5IGludm9sdmluZyBJb1Qgc29mdHdhcmUgaW5kdXN0cnk/XV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMDIgT2N0IDIwMTggMDk6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgQ0JJIC0gQ29tbW9uIEJ1aWxkIEluZnJhc3RydWN0dXJlIGNoYW5nZXNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L2RlbmlzLXJveS9lY2xpcHNlLWNiaS1jb21tb24tYnVpbGQtaW5mcmFzdHJ1Y3R1cmUtY2hhbmdlc11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBDQkksIHdoaWNoIHRyYWNlcyBpdHMgcm9vdHMgYmFjayB0byAyMDA2LCBoYXMgdW5kZXJnb25lIHNvbWUgaW1wb3J0YW50IGNoYW5nZXMgcmVjZW50bHksIGluY2x1ZGluZyBhIG5ldyBLdWJlcm5ldGVzK0RvY2tlci1wb3dlcmVkIGVudmlyb25tZW50IGF0IGh0dHBzOi8vamVua2lucy5lY2xpcHNlLm9yZyB0aGF0IHJlIGFubm91bmNlZCBwcmV2aW91c2x5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDI4IFNlcCAyMDE4IDE1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgRm91bmRhdGlvbiBhbmQgQ2xvdWQgTmF0aXZlIENvbXB1dGluZyBGb3VuZGF0aW9uIENvbGxhYm9yYXRlIHRvIEdyb3cgS3ViZXJuZXRlcyBVc2UgQ2FzZXMgaW4gVHJpbGxpb24gRG9sbGFyIElvVCBNYXJrZXRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9nbG9iZW5ld3N3aXJlLmNvbS9uZXdzLXJlbGVhc2UvMjAxOC8wOS8yNi8xNTc2NjUxLzAvZW4vRWNsaXBzZS1Gb3VuZGF0aW9uLWFuZC1DbG91ZC1OYXRpdmUtQ29tcHV0aW5nLUZvdW5kYXRpb24tQ29sbGFib3JhdGUtdG8tR3Jvdy1LdWJlcm5ldGVzLVVzZS1DYXNlcy1pbi1UcmlsbGlvbi1Eb2xsYXItSW9ULU1hcmtldC5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JlZCBIYXQgYW5kIG90aGVyIEVjbGlwc2UgSW9UIG1lbWJlcnMgd2lsbCBjb2xsYWJvcmF0ZSBpbiB3b3JraW5nIGdyb3VwIHRvIGV4dGVuZCBjYXBhYmlsaXRpZXMgb2YgS3ViZXJuZXRlcyBmb3IgSW9UIEVkZ2UgdXNlIGNhc2VzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI3IFNlcCAyMDE4IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICA8dGl0bGU+PCFbQ0RBVEFbSzhzIGF0IHRoZSBFZGdlIC0gU29tZSBDb250ZXh0IG9uIHRoZSBOZXcgS3ViZXJuZXRlcyBJb1QgV29ya2luZyBHcm91cF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwOi8vYml0Lmx5LzJEdTlpNHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBleGNpdGVkIHRvIGJlIHBhcnQgb2YgdG9kYXkncyBhbm5vdW5jZW1lbnQgb2YgYSBuZXcgS3ViZXJuZXRlcyBJb1QgRWRnZSBXb3JraW5nIEdyb3VwLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDI2IFNlcCAyMDE4IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICA8dGl0bGU+PCFbQ0RBVEFbV2VsY29taW5nIEdsYXNzRmlzaCB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90YW5qYS1vYnJhZG92aWMvd2VsY29taW5nLWdsYXNzZmlzaC1lY2xpcHNlLWZvdW5kYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQSBtYWpvciBtaWxlc3RvbmUgd2FzIGFjaGlldmVkIHllc3RlcmRheSEgVGhlIEdsYXNzRmlzaCBjb2RlIGZyb20gT3JhY2xlIG1hZGUgaXRzIGhvbWUgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbidzIEdpdCByZXBvc2l0b3JpZXMsIHN0YXJ0aW5nIGEgbmV3IGVyYSBvZiBFY2xpcHNlIEdsYXNzRmlzaC4gXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMTkgU2VwIDIwMTggMTQ6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgIDx0aXRsZT48IVtDREFUQVtBbiAkOC43IEJpbGxpb24gU2hhcmVkIEludmVzdG1lbnQ6IFNpemluZyB0aGUgRWNvbm9taWMgVmFsdWUgb2YgRWNsaXBzZSBDb21tdW5pdHkgQ29sbGFib3JhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnL3Bvc3QvdGhhYmFuZy1tYXNob2xvZ3UvODctYmlsbGlvbi1zaGFyZWQtaW52ZXN0bWVudC1zaXppbmctZWNvbm9taWMtdmFsdWUtZWNsaXBzZS1jb21tdW5pdHldXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2hhdCBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvZGUgY29udHJpYnV0ZWQgYnkgdGhlIEVjbGlwc2UgY29tbXVuaXR5PyBXZSBlc3RpbWF0ZSB0aGF0IHRoZSByb3VnaGx5IDE2MiBtaWxsaW9uIHRvdGFsIHBoeXNpY2FsIHNvdXJjZSBsaW5lcyBvZiBjb2RlIGluIEVjbGlwc2UgcmVwb3NpdG9yaWVzIHJlcHJlc2VudCBhICQ4LjcgYmlsbGlvbiBVU0Qgc2hhcmVkIHRlY2hub2xvZ3kgaW52ZXN0bWVudCBieSBvdXIgY29tbXVuaXR5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDEzIFNlcCAyMDE4IDA5OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICA8dGl0bGU+PCFbQ0RBVEFbTWl6dWhvIEludGVybmF0aW9uYWwgSm9pbnMgRWNsaXBzZSBGb3VuZGF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHA6Ly93d3cuZ2xvYmVuZXdzd2lyZS5jb20vbmV3cy1yZWxlYXNlLzIwMTgvMDkvMTEvMTU2OTE3NS8wL2VuL01penVoby1JbnRlcm5hdGlvbmFsLUpvaW5zLUVjbGlwc2UtRm91bmRhdGlvbi5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW01penVobyBJbnRlcm5hdGlvbmFsLCB0aGUgc2VjdXJpdGllcyAmIGludmVzdG1lbnQgYmFua2luZyBhcm0gb2YgdGhlIE1penVobyBGaW5hbmNpYWwgR3JvdXAsIGhhcyBqb2luZWQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxMSBTZXAgMjAxOCAxNDo1NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8dGl0bGU+PCFbQ0RBVEFbSG93IG1hbnkgbGluZXMgb2YgT3BlbiBTb3VyY2UgY29kZSBhcmUgaG9zdGVkIGF0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24/XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZy5iZW5qYW1pbi1jYWJlLmNvbS8yMDE4LzA5LzA0L2hvdy1tYW55LWxpbmVzLW9mLW9wZW4tc291cmNlLWNvZGUtYXJlLWhvc3RlZC1hdC10aGUtZWNsaXBzZS1mb3VuZGF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0FzIG9mIEF1Z3VzdCAxc3QsIHRoZXJlIGFyZSAzMzAgYWN0aXZlIG9wZW4tc291cmNlIHByb2plY3RzIGFuZCAxMTIwIEdpdCByZXBvc2l0b3JpZXMsIGFzIGZvciBsaW5lcyBvZiBjb2RlLi4uIF1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA1IFNlcCAyMDE4IDA5OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtUYWxrIHdpdGggeW91ciB0ZWFtIGFib3V0IEVjbGlwc2VDb24gRXVyb3BlIDIwMThdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE4XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JldmlldyB0aGUgcHJvZ3JhbSAtIHRhbGtzLCBrZXlub3RlcyBhbmQgc3BlY2lhbCBldmVudHMgLSBhbmQgcmVnaXN0ZXIgYnkgT2N0b2JlciAxIGZvciB0aGUgYmVzdCByYXRlcyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwNCBTZXAgMjAxOCAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIFdlbGNvbWVzIDE2IE5ldyBNZW1iZXJzIEFzIEpha2FydGEgRUUgYW5kIEVjbGlwc2UgSW9UIERldmVsb3BlciBDb21tdW5pdGllcyBTdXJnZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2dsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE4LzA4LzI5LzE1NTgzMjUvMC9lbi9FY2xpcHNlLUZvdW5kYXRpb24tV2VsY29tZXMtMTYtTmV3LU1lbWJlcnMtQXMtSmFrYXJ0YS1FRS1hbmQtRWNsaXBzZS1Jb1QtRGV2ZWxvcGVyLUNvbW11bml0aWVzLVN1cmdlLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG9kYXksIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gYW5ub3VuY2VkIHRoZSBhZGRpdGlvbiBvZiAxNiBuZXcgbWVtYmVycy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyOSBBdWcgMjAxOCAxNTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIGFuZCBJQk0gUGFydG5lciB0byBIZWxwIEZpZ2h0IE5hdHVyYWwgRGlzYXN0ZXJzIGluIE5ldyBHbG9iYWwgT3BlbiBTb3VyY2UgU29mdHdhcmUgSW5pdGlhdGl2ZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwOi8vd3d3Lmdsb2JlbmV3c3dpcmUuY29tL25ld3MtcmVsZWFzZS8yMDE4LzA4LzIxLzE1NTQ0NjAvMC9lbi9FY2xpcHNlLUZvdW5kYXRpb24tYW5kLUlCTS1QYXJ0bmVyLXRvLUhlbHAtRmlnaHQtTmF0dXJhbC1EaXNhc3RlcnMtaW4tTmV3LUdsb2JhbC1PcGVuLVNvdXJjZS1Tb2Z0d2FyZS1Jbml0aWF0aXZlLmh0bWxdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT1NTIGRldmVsb3BlcnMgYXJlIGVuY291cmFnZWQgdG8gY3JlYXRlIHNvbHV0aW9ucyB0aGF0IGhlbHAgY29tbXVuaXRpZXMgaW1wcm92ZSBkaXNhc3RlciBwcmVwYXJlZG5lc3MgJiByZWNvdmVyeS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMSBBdWcgMjAxOCAxNDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbV2UgQXJlIE9wZW5dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3dlLWFyZS1vcGVuXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIEFyZSBPcGVuIGNhbXBhaWduIHByb3ZpZGVzIGEgcGVlayBpbnRvIEVjbGlwc2UgY29tbXVuaXR5J3Mgb3Blbm5lc3MsIGlubm92YXRpb24sIGFuZCBjb2xsYWJvcmF0aW9uLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDAyIEF1ZyAyMDE4IDA4OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIEZvdW5kYXRpb24gQW5ub3VuY2VzIEpha2FydGEgRUUgQ29tbWl0dGVlIEVsZWN0aW9uIFJlc3VsdHNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxODA3MzEtamFrYXJ0YUVFX2NvbW1pdHRlZV9lbGVjdGlvbi5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIHJlc3VsdHMgYXJlIGluIGZvciBQYXJ0aWNpcGFudCBhbmQgQ29tbWl0dGVyIE1lbWJlciBlbGVjdGlvbnMgZm9yIHJlcHJlc2VudGF0aXZlcyB0byB0aGUgSmFrYXJ0YSBFRSBXb3JraW5nIEdyb3VwIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDMxIEp1bCAyMDE4IDA5OjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBFbWJlZGRlZCBEZXZlbG9wbWVudF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvanVseS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhpcyBtb250aCdzIG5ld3NsZXR0ZXIgZmVhdHVyZXMgZml2ZSBhcnRpY2xlcyB0aGF0IGZvY3VzIG9uIEVtYmVkZGVkIERldmVsb3BtZW50LiBSZWFkIGl0IG5vdy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyNiBKdWwgMjAxOCAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBJb1QgRGF5IFNpbmdhcG9yZSBBbm5vdW5jZWRdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9pb3QuZWNsaXBzZS5vcmcvZWNsaXBzZS1pb3QtZGF5LXNpbmdhcG9yZS0yMDE4L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgdmVyeSBmaXJzdCBFY2xpcHNlIElvVCBEYXkgU2luZ2Fwb3JlIHdpbGwgdGFrZSBwbGFjZSBTZXB0LiAxOCBpbiBjby1sb2NhdGlvbiB3aXRoIElvVCBXb3JsZCBBc2lhIDIwMTguXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjQgSnVsIDIwMTggMDY6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtOZXcgV29ya2luZyBHcm91cCBhbmQgQ2hhcnRlciBhdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uOiBPcGVuTW9iaWxpdHldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3dvcmtpbmdncm91cHMvb3Blbm1vYmlsaXR5X2NoYXJ0ZXIucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW09wZW5Nb2JpbGl0eSB3aWxsIGRyaXZlIHRoZSBldm9sdXRpb24gYW5kIGJyb2FkIGFkb3B0aW9uIG9mIG1vYmlsaXR5IG1vZGVsbGluZyBhbmQgc2ltdWxhdGlvbiB0ZWNobm9sb2dpZXMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMjAgSnVsIDIwMTggMTI6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0NhbGwgZm9yIHN1Ym1pc3Npb25zIGZvciBFY2xpcHNlQ29uIEV1cm9wZSAyMDE4XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMThdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQmUgcGFydCBvZiB0aGUgRWNsaXBzZUNvbiBFdXJvcGUgcHJvZ3JhbS4gU3VibWl0IHlvdXIgdGFsa3MgYnkgSnVseSAxNnRoLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDA2IEp1bCAyMDE4IDEwOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIEFubnVhbCBDb21tdW5pdHkgUmVwb3J0XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9mb3VuZGF0aW9uL3JlcG9ydHMvMjAxOF9hbm51YWxfcmVwb3J0LnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uJ3MgMjAxOCBBbm51YWwgQ29tbXVuaXR5IFJlcG9ydCBoYXMgYmVlbiBwdWJsaXNoZWQsIGFuZCBpcyBub3cgYXZhaWxhYmxlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDAzIEp1bCAyMDE4IDE1OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBFY2xpcHNlIFBob3Rvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvanVuZS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbTmF0dXJhbGx5LCB0aGlzIGlzc3VlIG9mIHRoZSBuZXdzbGV0dGVyIGZlYXR1cmVzIHNvbWUgb2YgdGhlIHRoaW5ncyB0aGF0IGFyZSBuZXcgaW4gRWNsaXBzZSBQaG90b24hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMDMgSnVsIDIwMTggMTI6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1Rha2UgWW91ciBDb2RlIHRvIHRoZSBOZXh0IExldmVsIFdpdGggRWNsaXBzZSBQaG90b25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9ibG9ncy5lY2xpcHNlLm9yZy9wb3N0L3RoYWJhbmctbWFzaG9sb2d1L3Rha2UteW91ci1jb2RlLW5leHQtbGV2ZWwtZWNsaXBzZS1waG90b25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSm9pbiBvdmVyIDQgbWlsbGlvbiBhY3RpdmUgdXNlcnMgb2YgdGhlIEVjbGlwc2UgSURFIGFuZCB0YWtlIHlvdXIgY29kaW5nIHRvIHRoZSBuZXh0IGxldmVsIHdpdGggRWNsaXBzZSBQaG90b24uXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjggSnVuZSAyMDE4IDEyOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtOZXcgUGhvdG9uIFJlbGVhc2Ugb2YgRWNsaXBzZSBJREUgU2hpcHMgV2l0aCBGdWxsIFJ1c3QgU3VwcG9ydF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE4MDYyN19uZXctcGhvdG9uLXJlbGVhc2Utb2YtZWNsaXBzZS1pZGUtc2hpcHMtd2l0aC1mdWxsLXJ1c3Qtc3VwcG9ydC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0b2RheSBhbm5vdW5jZWQgdGhlIEVjbGlwc2UgUGhvdG9uIHNpbXVsdGFuZW91cyByZWxlYXNlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDI3IEp1bmUgMjAxOCAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIC0gQSBGaXJzdCBMb29rIGF0IEpha2FydGEgRUVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE4L21heS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhpcyBtb250aCwgcmVhZCBlaWdodCBncmVhdCBwaWVjZXMgdG8gZ2V0IGluZm9ybWVkIGFib3V0IHZhcmlvdXMgcGFydHMgb2YgSmFrYXJ0YSBFRS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAwNCBKdW5lIDIwMTggMDU6NDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1JDMiBub3cgYXZhaWxhYmxlIGZvciBFY2xpcHNlIFBob3Rvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvaW5kZXgtZGV2ZWxvcGVyLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtEb3dubG9hZCBhbmQgdGVzdCByZWxlYXNlIGNhbmRpZGF0ZSAyIGZvciBFY2xpcHNlIFBob3RvbiFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAwMSBKdW5lIDIwMTggMTE6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1VwZGF0ZXMgdG8gb3VyIFByaXZhY3kgUG9saWN5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmcvcG9zdC90aGFiYW5nLW1hc2hvbG9ndS91cGRhdGVzLW91ci1wcml2YWN5LXBvbGljeV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGhhcyB1cGRhdGVkIGl0J3MgcHJpdmFjeSBwb2xpY3kgZm9yIHRoZSBwcm90ZWN0aW9uIG9mIHlvdXIgcGVyc29uYWwgZGF0YS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAyNSBNYXkgMjAxOCAxMDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBFdXJvcGUgMjAxOCBDYWxsIGZvciBQYXBlcnNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE4XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JldmlldyB0aGUgQ0ZQLCB0YWxrIHdpdGggeW91ciB0ZWFtIGFuZCBzdWJtaXQgeW91ciB0YWxrcyB0b2RheSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxNCBNYXkgMjAxOCAxMzowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IFByb3Bvc2VkIENoYXJ0ZXIgZm9yIE9TLmJlYSBXb3JraW5nIEdyb3VwXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZWNsaXBzZS5vcmcvb3JnL3dvcmtpbmdncm91cHMvb3NiZWFfd2dfY2hhcnRlci5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbTmV3IHByb3Bvc2VkIGNoYXJ0ZXIgZm9yIE9TLmJlYSBXb3JraW5nIEdyb3VwIGlzIHJlYWR5IGZvciByZXZpZXcuIFBhdGljaXBhdGUgYnkgYWRkaW5nIGZlZWRiYWNrIG9uIHRoZSBtYWlsaW5nLWxpc3QuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTQgTWF5IDIwMTggMTM6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIENvbW1vbiBCdWlsZCBJbmZyYXN0cnVjdHVyZTogVXBjb21pbmcgQ2hhbmdlc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW52enFkUW13OWdZJmZlYXR1cmU9eW91dHUuYmVdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRWNsaXBzZSBDQkkgaXMgdW5kZXJnb2luZyBpbXBvcnRhbnQgY2hhbmdlcywgaW5jbHVkaW5nIEt1YmVybmV0ZXMvIERvY2tlciB2aWEgUmVkIEhhdCBPcGVuU2hpZnQgJiBDbG91ZEJlZXMgSmVua2lucyBFbnRlcnByaXNlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDEwIE1heSAyMDE4IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgLSBKYXZhIFRvb2xzIGFuZCBSdW50aW1lc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvYXByaWwvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoaXMgbW9udGgsIHJlYWQgYWxsIGFib3V0IEVjbGlwc2UgcHJvamVjdHM6IENvbGxlY3Rpb25zLCBKTm9TUUwsIE1pY3JvUHJvZmlsZSwgT3Blbko5LCBhbmQgVmVydC54XV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMDQgTWF5IDIwMTggMDU6MDA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRnJhbmNlIDIwMTg6IFJlZ2lzdGVyIEVhcmx5IV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9mcmFuY2UyMDE4L3JlZ2lzdHJhdGlvbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtQcmljZXMgZ28gdXAgYWZ0ZXIgQXByaWwgMzAsIHNvIHJlZ2lzdGVyIG5vdy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyNSBBcHIgMjAxOCAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1N1cnZleSBvZiAxODAwKyBkZXZlbG9wZXJzIG5vdyByZWxlYXNlZCBvbiBuZXcgSmFrYXJ0YSBFRSB3ZWJzaXRlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vamFrYXJ0YS5lZS9uZXdzLzIwMTgvMDQvMjQvamFrYXJ0YS1lZS1jb21tdW5pdHktc3VydmV5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTdXJ2ZXkgb2YgMSw4MDArIEphdmEgZGV2ZWxvcGVycyByZXZlYWxzICJjbG91ZCBuYXRpdmUiIHRvcCByZXF1aXJlbWVudCBpbiBwbGF0Zm9ybSdzIGV2b2x1dGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyNCBBcHIgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbSW9UIERldmVsb3BlciBTdXJ2ZXkgMjAxOCB8IFJlc3VsdHMgYXJlIGluIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2Jsb2cuYmVuamFtaW4tY2FiZS5jb20vMjAxOC8wNC8xNy9rZXktdHJlbmRzLWlvdC1kZXZlbG9wZXItc3VydmV5LTIwMThdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbUmVzdWx0cyBmcm9tIHRoZSBJb1QgRGV2ZWxvcGVyIFN1cnZleSBhcmUgaW4hIFJlYWQgYWJvdXQgdGhlIGtleSBmaW5kaW5ncyBhYm91dCBJb1QgY2xvdWQgcGxhdGZvcm1zLCBkYXRhYmFzZXMsIHNlY3VyaXR5LCBhbmQgbW9yZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxNyBBcHIgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBPeHlnZW4gM0EgaGFzIGJlZW4gcmVsZWFzZWQhXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2Fkcy9wYWNrYWdlcy9yZWxlYXNlL294eWdlbi8zYV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtEb3dubG9hZCB0aGUgT3h5Z2VuIDNBIHBhY2thZ2VzIHRvZGF5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDEyIEFwciAyMDE4IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtXaW5uZXJzIG9mIE9wZW4gSW9UIENoYWxsZW5nZSA0LjAgRGVtb25zdHJhdGUgSG93IE9wZW4gU291cmNlIEFjY2VsZXJhdGVzIElubm92YXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxODA0MDRfaW90Y2hhbGxlbmdlX3dpbm5lcnMyMDE4LnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtFY2xpcHNlIElvVCBpcyBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSB3aW5uZXJzIG9mIHRoZSBmb3VydGggYW5udWFsIE9wZW4gSW9UIENoYWxsZW5nZSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAwNCBBcHIgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBGcmFuY2UgMjAxOCBQcm9ncmFtIEFubm91bmNlZF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9mcmFuY2UyMDE4L3Byb2dyYW0vc2Vzc2lvbnMvYWNjZXB0ZWRdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU2VlIHRoZSBsaXN0IG9mIGFjY2VwdGVkIHNlc3Npb25zLCBhbmQgcmVnaXN0ZXIgbm93IGZvciB0aGUgbG93ZXN0IHByaWNlLiBXZSdsbCBzZWUgeW91IEp1bmUgMTMgLSAxNCBpbiBUb3Vsb3VzZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwMyBBcHIgMjAxOCAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVm90aW5nIGZvciB0aGUgSmFrYXJ0YSBFRSBsb2dvIGlzIG5vdyBvcGVuIV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kL2UvMUZBSXBRTFNkUmNuUXMyUEhSRk9zeDBrX3dHZ3Z2WWcxcjhWc3M0NGVJc2dqaldER09mUThlNEEvdmlld2Zvcm1dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVm90aW5nIHdpbGwgYmUgY29uZHVjdGVkIHVzaW5nIGEgcmFua2VkIHBvbGwuIFRvIHZvdGUsIHNpbXBseSByYW5rIHRoZSBmaW5hbCBzaG9ydGxpc3Qgb2YgbG9nb3MgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyOSBNYXIgMjAxOCAxNzo0NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbVGhyZWUgZGF5cyBsZWZ0IHRvIGNvbXBsZXRlIHRoZSBKYWthcnRhIEVFIFN1cnZleSFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuc3VydmV5bW9ua2V5LmNvbS9yL2pha2FydGFlY11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPbmUgd2VlayBsZWZ0IHRvIHNoYXJlIHlvdXIgaW5zaWdodHMgb24gSmF2YSBFRSBhbmQgaGVscCBzaGFwZSB0aGUgZnV0dXJlIG9mIEpha2FydGEgRUUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjcgTWFyIDIwMTggMDc6MTA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciB8IENvZGUgaW4gRGlmZmVyZW50IExhbmd1YWdlc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvbWFyY2gvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JlYWQgd2hhdCdzIG5ldyBpbiB0aGUgRWNsaXBzZSBKRFQgTGFuZ3VhZ2UgU2VydmVyIGFuZCBFY2xpcHNlIFBEVCAoUEhQKSwgdGhlbiBsZWFybiBhYm91dCBFY2xpcHNlIFh0ZXh0IGFuZCBFY2xpcHNlIE1pdGEgKElvVCkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjIgTWFyIDIwMTggMDQ6MTM6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0NvbXBsZXRlIHRoZSBKYWthcnRhIEVFIERldmVsb3BlciBTdXJ2ZXldXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuc3VydmV5bW9ua2V5LmNvbS9yL2pha2FydGFlY11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTaGFyZSB5b3VyIGluc2lnaHRzIG9uIEphdmEgRUUgYW5kIGhlbHAgc2hhcGUgdGhlIGZ1dHVyZSBvZiBKYWthcnRhIEVFLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDE2IE1hciAyMDE4IDA2OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBJb1QgRGF5IFNhbnRhIENsYXJhIHwgU3BlYWtlcnMgQW5ub3VuY2VkXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vaW90LmVjbGlwc2Uub3JnL2VjbGlwc2UtaW90LWRheS1zYW50YS1jbGFyYS0yMDE4L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSdyZSBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSBzcGVha2VycyBmb3IgdGhlIEVjbGlwc2UgSW9UIERheSBTYW50YSBDbGFyYSwgY28tbG9jYXRlZCB3aXRoIElvVCBXb3JsZCAyMDE4IG9uIE1heSAxNC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxNSBNYXIgMjAxOCAwNzowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0xhc3QgY2FsbCBmb3IgRWNsaXBzZUNvbiBGcmFuY2Ugc3VibWlzc2lvbnNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZnJhbmNlMjAxOC9jZnBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRGVhZGxpbmUgdG8gcHJvcG9zZSBhIHRhbGsgaXMgTW9uZGF5LCBNYXJjaCAxOS4gR2V0IHlvdXIgdGFsayBpbiBub3cgZm9yIHlvdXIgY2hhbmNlIHRvIGJlIHBhcnQgb2YgYSBncmVhdCBwcm9ncmFtIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDEyIE1hciAyMDE4IDE2OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIHN1cHBvcnRzIEVVIGZ1bmRlZCBCcmFpbi1Jb1QgUHJvamVjdF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE4MDMxMi1icmFpbmlvdC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIEV1cm9wZSBTZWxlY3RlZCB0byBQcm92aWRlIE9wZW4gU291cmNlIENvbW11bml0eSBCdWlsZGluZyBFeHBlcnRpc2UgZm9yIEVVIGZ1bmRlZCBJb1QgUmVzZWFyY2ggUHJvamVjdF1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDEyIE1hciAyMDE4IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBGb3VuZGF0aW9uIEFubm91bmNlcyAyMDE4IEJvYXJkIE1lbWJlciBFbGVjdGlvbiBSZXN1bHRzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTgwMzA3LWJvYXJkZWxlY3Rpb25yZXN1bHRzMjAxOC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVG9kYXkgd2UgYXJlIHBsZWFzZSB0byBhbm5vdW5jZSB0aGUgcmVzdWx0cyBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIFN1c3RhaW5pbmcgTWVtYmVyIGFuZCBDb21taXR0ZXIgTWVtYmVyIGVsZWN0aW9ucy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAwNyBNYXIgMjAxOCAxODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0Zyb20gSmF2YSBFRSB0byBKYWthcnRhIEVFXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vbW1pbGlua292LndvcmRwcmVzcy5jb20vMjAxOC8wMi8yNi9hbmQtdGhlLW5hbWUtaXMvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIGFyZSBoYXBweSB0byBhbm5vdW5jZSB0aGF0IHRoZSBuZXcgbmFtZSBmb3IgdGhlIHRlY2hub2xvZ3kgZm9ybWVybHkga25vd24gYXMgSmF2YSBFRSBpcy4uLiBKYWthcnRhIEVFIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI2IEZlYiAyMDE4IDE0OjUwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBCb290ICYgQnVpbGQgRWNsaXBzZSBQcm9qZWN0c11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvZmVicnVhcnkvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0ZlYXR1cmluZyBhcnRpY2xlcyBhYm91dCBTcHJpbmcgVG9vbHMsIEdyYWRsZSBwbHVnaW4gKEJ1aWxkc2hpcCksIERpcmlnaWJsZSBjbG91ZCBwbGF0Zm9ybSwgYW5kIEVNRiBQYXJzbGV5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDIyIEZlYiAyMDE4IDM6NTE6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0NvdW50ZG93bjogMiB3ZWVrcyB8IENvbXBsZXRlIElvVCBEZXZlbG9wZXIgU3VydmV5XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LnN1cnZleW1vbmtleS5kZS9yL2VjbGlwc2VvcmddXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGFrZSAxMCBtaW51dGVzIHRvIGNvbXBsZXRlIHRoZSBmb3VydGggYW5udWFsIElvVCBEZXZlbG9wZXIgc3VydmV5IV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDIwIEZlYiAyMDE4IDQ6Mjc6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIEZyYW5jZSAyMDE4IHwgQ2FsbCBmb3IgUGFwZXJzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2ZyYW5jZTIwMThdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ2FsbCBmb3IgcGFwZXIgc3VibWlzc2lvbnMgYXJlIG5vdyBvcGVuIHVudGlsIE1hcmNoIDE5LiBXZSdsbCBzZWUgeW91IEp1bmUgMTMgLSAxNCBpbiBUb3Vsb3VzZSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+TW9uLCAxMiBGZWIgMjAxOCAwOToxNTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VFLm5leHQgd29ya2luZyBncm91cCB8IENvbW11bml0eSByZXZpZXcgcHJvY2Vzc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvd29ya2luZ2dyb3Vwcy9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQW5ub3VuY2luZyB0aGUgRUUubmV4dCB3b3JraW5nIGdyb3VwIHRvIHN1cHBvcnQgdGhlIEVFNEogcHJvamVjdHMuIEpvaW4gdGhlIHJldmlldyBwcm9jZXNzIG9mIHRoZSBjaGFydGVyLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDA2IEZlYiAyMDE4IDA4OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtMYXN0IFdlZWsgdG8gU3VibWl0IGZvciBGT1NTNEcgTkEgMjAxOCFdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly8yMDE4LmZvc3M0Zy1uYS5vcmcvY2ZwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1N1Ym1pc3Npb25zIGNsb3NlIEZlYiA4LCBzbyBwcm9wb3NlIHlvdXIgdGFsayBub3cgZm9yIEZPU1M0RyBOQSAyMDE4LCBNYXkgMTQtMTYgaW4gU3QuIExvdWlzXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPkZyaSwgMDIgRmViIDIwMTggMDg6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBDb21pbmcgaW4gMjAxOF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTgvamFudWFyeS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2hhdCdzIGNvbWluZyB0byB0aGUgRWNsaXBzZSBDb21tdW5pdHkgaW4gMjAxOD8gUmVhZCB0aGUgbmV3c2xldHRlciB0byBmaW5kIG91dCFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyNSBKYW4gMjAxOCAxMDozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTGF1bmNoaW5nIElvVCBEZXZlbG9wZXIgU3VydmV5IDIwMThdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvaW90ZGV2c3VydmV5MjAxOC5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgYXJlIHBsZWFzZWQgdG8gbGF1bmNoIHRoZSBmb3VydGggYW5udWFsIElvVCBEZXZlbG9wZXIgU3VydmV5ISBDb21wbGV0ZSB0aGUgc3VydmV5IHRvZGF5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDI0IEphbiAyMDE4IDQ6Mjc6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgSW9UIERheSBTYW50YSBDbGFyYSAyMDE4IHwgQ2FsbCBmb3IgUGFwZXJzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vaW90LmVjbGlwc2Uub3JnL2VjbGlwc2UtaW90LWRheS1zYW50YS1jbGFyYS0yMDE4L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSdyZSBoYXBweSB0byBhbm5vdW5jZSB0aGUgRWNsaXBzZSBJb1QgRGF5IFNhbnRhIENsYXJhLCB0YWtpbmcgcGxhY2UgTWF5IDE0LCBpbiBjby1sb2NhdGlvbiB3aXRoIElvVCBXb3JsZCAyMDE4Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDE1IEphbiAyMDE4IDk6MTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciB8IENhcGVsbGE6IG9wZW4gc291cmNlIE1CU0Ugc29sdXRpb25dXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE3L2RlY2VtYmVyL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtMZWFybiBldmVyeXRoaW5nIGFib3V0IENhcGVsbGEsIGFuIG9wZW4gc291cmNlIHdvcmtiZW5jaCB0aGF0IGFsbG93cyBlbmdpbmVlcnMgdG8gZGVzaWduIGNvbXBsZXggc3lzdGVtcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxNCBEZWMgMjAxNyAxMDoxMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW09wZW4gU291cmNlIENvbW11bml0eSBBY2NlbGVyYXRlcyBCaWcgRGF0YSBBbmFseXRpY3MgZm9yIEdlb3NwYXRpYWwgU29sdXRpb25zXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzEyMTRfbG9jYXRpb250ZWNob3BlbnNvdXJjZS5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbTG9jYXRpb25UZWNoIGFubm91bmNlcyBuZXcgcHJvamVjdCByZWxlYXNlcyB0aGF0IHByb3ZpZGUgY29yZSB0ZWNobm9sb2d5IGZvciBnZW9zcGF0aWFsIGJpZyBkYXRhIGFuYWx5dGljIHNvbHV0aW9ucy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxNCBEZWMgMjAxNyAwODowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQW5ub3VuY2luZyBPcGVuIElvVCBDaGFsbGVuZ2UgNC4wIFNjaG9sYXJzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vbWVkaXVtLmNvbS9Acm94YW5uZS5pb3Qvb3Blbi1pb3QtY2hhbGxlbmdlLTQtMC1zY2hvbGFycy1jZjc1MGVjM2IxNGJdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbQ29uZ3JhdHVsYXRpb25zIHRvIHRoZSBUb3AgMTIgdGVhbXMgd2hvIHN1Ym1pdHRlZCB0aGUgYmVzdCBwcm9wb3NhbHMgZm9yIHRoZSBmb3VydGggT3BlbiBJb1QgQ2hhbGxlbmdlIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDEzIERlYyAyMDE3IDA5OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBMb2NhdGlvbiBNYXR0ZXJzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxNy9ub3ZlbWJlci9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhpcyBuZXdzbGV0dGVyIGlzIGV2ZXJ5dGhpbmcgZ2Vvc3BhY2lhbCAoTG9jYXRpb25UZWNoKSArIGEgZmVhdHVyZWQgYXJ0aWNsZSBhYm91dCBjcmVhdGluZyB2aWRlbyBnYW1lcy5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyMiBOb3YgMjAxNyAwNjoyMzowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbT3BlbiBJb1QgQ2hhbGxlbmdlIDQuMCB8IEV4dGVuZGVkIERlYWRsaW5lIE5vdiAyMF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwOi8vaW90LmVjbGlwc2Uub3JnL29wZW4taW90LWNoYWxsZW5nZS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbT25lIGxhc3Qgd2VlayB0byBzdWJtaXQgeW91ciBvcGVuIElvVCBzb2x1dGlvbiBpZGVhLiBZb3UgY2FuIHRoZW4gd29yayBvbiBpdCB1bnRpbCBNYXJjaCAxNS4gU3VibWl0IG5vdyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxNSBOb3YgMjAxNyAwNTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiArIEx1ZHdpZ3NidXJnID0gR3JlYXQgUGFydG5lcnNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxNy9uZXdzL2VjbGlwc2Vjb24tbHVkd2lnc2J1cmctZ3JlYXQtcGFydG5lcnNdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2UgYXJlIHBsZWFzZWQgdG8gYW5ub3VuY2UgYSBzdHJhdGVnaWMgcGFydG5lcnNoaXAgYmV0d2VlbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIEV1cm9wZSBhbmQgdGhlIENpdHkgb2YgTHVkd2lnc2J1cmcgdGhhdCBrZWVwcyBFY2xpcHNlQ29uIEV1cm9wZSBhdCB0aGUgRm9ydW0gYW0gU2NobG9zc3BhcmsgdGhyb3VnaCAyMDE5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5TdW4sIDIyIE9jdCAyMDE3IDA4OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtOZXcgSW5kdXN0cnkgNC4wIE9wZW4gVGVzdGJlZCBBZGRyZXNzZXMgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBhbmQgTWFuYWdlbWVudCBpbiBNYW51ZmFjdHVyaW5nXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzEwMTlfaW5kdXN0cnk0MF90ZXN0YmVkLnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtCb3NjaCBTb2Z0d2FyZSBJbm5vdmF0aW9ucywgQ09OVEFDVCBTb2Z0d2FyZSwgRXVyb3RlY2gsIGZvcnRpc3MgR21iSCwgYW5kIEluZmx1eERhdGEgY29sbGFib3JhdGUgdG8gZGVtb25zdHJhdGUgUHJvZHVjdCBQZXJmb3JtYW5jZSBNYW5hZ2VtZW50Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDE5IE9jdCAyMDE3IDExOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIFNjaWVuY2UgQWR2YW5jZXMgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBmb3IgU2NpZW50aWZpYyBSZXNlYXJjaF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE3MTAxOF9zY2llbmNlb3BlbnNvdXJjZS5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgU2NpZW5jZSBXb3JraW5nIEdyb3VwLCBhIHdvcmtpbmcgZ3JvdXAgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdG9kYXkgYW5ub3VuY2VkIHRoZSBuZXcgcmVsZWFzZXMgb2YgZml2ZSBvcGVuIHNvdXJjZSBwcm9qZWN0cyB1c2VkIGJ5IHRoZSBzY2llbnRpZmljIHJlc2VhcmNoIGNvbW11bml0eS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxOCBPY3QgMjAxNyAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjE8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciB8IFV0aWxpdHkgQmVsdDogUHJvamVjdHMgYW5kIFRvb2xzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxNy9vY3RvYmVyL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtMZWFybiBhYm91dCBKVW5pdCA1LCBlNCBvbiBKYXZhRlgsIHNjcmlwdGluZyB3aXRoIEVBU0UsIGVtYmVkZGVkIHRvb2xzIGFuZCBFY2xpcHNlIENEVCwgRmVycmV0IHNlYXJjaCB0b29sLCBhbmQgc29mdHdhcmUgZXRoaWNzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5XZWQsIDE4IE9jdCAyMDE3IDA1OjAyOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbT24gTmFtaW5nIEVjbGlwc2UgRW50ZXJwcmlzZSBmb3IgSmF2YSAoRUU0SildXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly9tbWlsaW5rb3Yud29yZHByZXNzLmNvbS8yMDE3LzA5LzMwL29uLW5hbWluZy9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2hhdCBpcyBFRTRKPyBXaWxsIGl0IGJlY29tZSB0aGUgYnJhbmQgdGhhdCByZXBsYWNlcyBKYXZhIEVFPyBSZWFkIHRoZSBibG9nIHBvc3QgdG8gZmluZCBvdXQuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMDQgT2N0IDIwMTcgMDg6NDg6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRXVyb3BlOiBMYXN0IENoYW5jZSBmb3IgdGhlIEVhcmx5IFByaWNlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Vjb24ub3JnL2V1cm9wZTIwMTcvcmVnaXN0cmF0aW9uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW09jdG9iZXIgNSBpcyB0aGUgbGFzdCBkYXkgdG8gc2F2ZSAmZXVybzsxMDAgb24gRUNFIHJlZ2lzdHJhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAwMyBPY3QgMjAxNyAxMTozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQW5udWFsIERvbmF0aW9uIENhbXBhaWduOiBFbmQgVXNlciBTdXBwb3J0IGZvciB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vaWFuc2tlcnJldHQud29yZHByZXNzLmNvbS8yMDE3LzA5LzI5L2FubnVhbC1kb25hdGlvbi1jYW1wYWlnbi1lbmQtdXNlci1zdXBwb3J0LWZvci10aGUtZWNsaXBzZS1mb3VuZGF0aW9uL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUbyBlbmNvdXJhZ2UgZW5kLXVzZXIgc3VwcG9ydCwgIHdlIGFyZSBsYXVuY2hpbmcgdGhlIE9jdG9iZXIgRG9uYXRpb24gQ2FtcGFpZ24uIFRoZSBnb2FsIGlzIHRvIGhhdmUgb3ZlciAxMDAwIGluZGl2aWR1YWxzIGRvbmF0ZSB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFuZCBoZWxwIHN1cHBvcnQgdGhlIG92ZXJhbGwgY29tbXVuaXR5Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5GcmksIDI5IFNlcCAyMDE3IDExOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIElvVCBBbm5vdW5jZXMgRm91cnRoIEVkaXRpb24gb2YgdGhlIE9wZW4gSW9UIENoYWxsZW5nZV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2VjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcwOTI4X29wZW5faW90X2NoYWxsZW5nZV80LnBocF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtJb1QgZW50aHVzaWFzdD8gVGhpcyBDaGFsbGVuZ2UgaXMgZm9yIHlvdSEgU3VibWl0IHlvdXIgSW9UIHNvbHV0aW9uIHByb3Bvc2FsIGJ5IE5vdmVtYmVyIDEzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI4IFNlcCAyMDE3IDA5OjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBJREUgTm93IFN1cHBvcnRzIEphdmEgOV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3dheW5lYmVhdG9uLndvcmRwcmVzcy5jb20vMjAxNy8wOS8yMi9qYXZhLTktc3VwcG9ydC1mb3ItZWNsaXBzZS1pZGUtb3h5Z2VuLWVkaXRpb24vXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0phdmEgOSBoYXMgYmVlbiByZWxlYXNlZCBpbnRvIHRoZSB3b3JsZCBhbmQgc3VwcG9ydCB0byBtYWtlIHlvdXIgRWNsaXBzZSBJREUgcmVhZHkgdG8gYnVpbGQsIHJ1biwgYW5kIGRlYnVnIEphdmEgOSBhcHBsaWNhdGlvbnMgaXMgYXZhaWxhYmxlIGZyb20gdGhlIEVjbGlwc2UgTWFya2V0cGxhY2UuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjYgU2VwIDIwMTcgMTQ6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1NwZWNpYWwgTm90aWNlIGZvciBFY2xpcHNlIElERSBVc2VycyBvbiBtYWNPUyAxMC4xMyBpbiBub24tRW5nbGlzaCBtb2RlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcmVzcy1yZWxlYXNlLzIwMTcwOTI1Y3JpdGljYWxidWcucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1doZW4gRWNsaXBzZSBpcyBsYXVuY2hlZCBvbiBtYWNPUyAxMC4xMyBhbmQgdXNlcidzIHByaW1hcnkgbGFuZ3VhZ2UgaXMgbm90IHNldCB0byBFbmdsaXNoLCBhbGwgdGhlIG1lbnUgaXRlbXMgaW4gdGhlIG1haW4gbWVudWJhciBhcmUgZGlzYWJsZWQuIEhvd2V2ZXIsIENvbnRleHQgbWVudXMgYXJlIG5vdCBkaXNhYmxlZF1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI1IFNlcCAyMDE3IDA4OjMwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbR2V0IHRoZSBFYXJseSBQcmljZSBmb3IgRWNsaXBzZUNvbiBFdXJvcGVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxNy9yZWdpc3RyYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbUmVnaXN0ZXIgbm93IGFuZCBzYXZlIOKCrDEwMCEgUHJpY2VzIGdvIHVwIGFmdGVyIE9jdG9iZXIgNS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAyMSBTZXAgMjAxNyAwODozMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgRWNsaXBzZSBNaWNyb1Byb2ZpbGVdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L2VjbGlwc2VfbmV3c2xldHRlci8yMDE3L3NlcHRlbWJlci9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbSW4gdGhlIFNlcHRlbWJlciBpc3N1ZSBvZiB0aGUgRWNsaXBzZSBOZXdzbGV0dGVyLCBkaXNjb3ZlciBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIGtub3cgYWJvdXQgRWNsaXBzZSBNaWNyb1Byb2ZpbGUuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjAgU2VwIDIwMTcgMTA6MzA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0phdmEgRUUgTW92ZXMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL21taWxpbmtvdi53b3JkcHJlc3MuY29tLzIwMTcvMDkvMTIvamF2YS1lZS1tb3Zlcy10by10aGUtZWNsaXBzZS1mb3VuZGF0aW9uL11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtPcmFjbGUgYW5ub3VuY2VkIHRvZGF5IHRoYXQgdGhleSwgYWxvbmcgd2l0aCBJQk0gYW5kIFJlZCBIYXQsIHdpbGwgYmUgbW92aW5nIEphdmEgRUUgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbi5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAxMiBTZXAgMjAxNyAxNzowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0ZpcnN0IFJlbGVhc2Ugb2YgRWNsaXBzZSBQYXB5cnVzIGZvciBSZWFsIFRpbWU6IE1vZGVsaW5nIFRvb2wgZm9yIFVNTC1SVF1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJlc3MtcmVsZWFzZS8yMDE3MDkwN3BhcHlydXMucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBQYXB5cnVzIEluZHVzdHJ5IENvbnNvcnRpdW0sIGFuIEVjbGlwc2UgRm91bmRhdGlvbiBXb3JraW5nIEdyb3VwLCBpcyBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSByZWxlYXNlIG9mIEVjbGlwc2UgUGFweXJ1cyBmb3IgUmVhbCBUaW1lIHYxLjAgKFBhcHlydXMtUlQpIGEgZnVsbHkgb3BlbiBzb3VyY2UgbW9kZWxpbmcgdG9vbCBpbnRlbmRlZCBmb3IgdGVhbXMgd29ya2luZyBvbiB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBlbWJlZGRlZCByZWFjdGl2ZSBzeXN0ZW1zLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDA3IFNlcCAyMDE3IDA5OjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MTwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCBBcHByb3ZlZCBCeSBPU0kgYW5kIEVjbGlwc2UgRm91bmRhdGlvbiBCb2FyZCBvZiBEaXJlY3RvcnNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzA4MjllcGx2Mi5waHBdXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwbGVhc2VkIHRvIGFubm91bmNlIGEgbmV3IHZlcnNpb24gMiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMIHYyKSBoYXMgYmVlbiBhcHByb3ZlZCBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIEJvYXJkIG9mIERpcmVjdG9ycyBhbmQgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjkgQXVnIDIwMTcgMTQ6MjA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPgorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgTmV3c2xldHRlciB8IEV4Y2l0aW5nIE5ldyBFY2xpcHNlIFByb2plY3RzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxNy9hdWd1c3QvXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBsYXRlc3QgbmV3c2xldHRlciBpcyBhbGwgYWJvdXQgbmV3IGFuZCBleGNpdGluZyBwcm9qZWN0cyFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMiBBdWcgMjAxNyAwOTowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZUNvbiBFdXJvcGU6IFNjaGVkdWxlIGFuZCBLZXlub3Rlc11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE3XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1RoZSBrZXlub3RlcyBhcmUgYW5ub3VuY2VkLCBhbmQgdGhlIHNjaGVkdWxlIGlzIG9uIGxpbmUgZm9yIEVDRSAyMDE3LiBSZWdpc3RlciBub3chXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMjEgQXVnIDIwMTcgMTA6MTA6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAgICAgCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTGF1bmNoaW5nIEVjbGlwc2UgSW9UIE5ld3NsZXR0ZXJdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL2VlcHVybC5jb20vY1luNC1uXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlJ3JlIGxhdWNoaW5nIGEgcXVhcnRlcmx5IEVjbGlwc2UgSW9UIE5ld3NsZXR0ZXIuIFN1YnNjcmliZSB0byByZWNlaXZlIHRoZSBmaXJzdCBpc3N1ZSB0aGlzIFNlcHRlbWJlci5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+RnJpLCAxOCBBdWcgMjAxNyAwNTo0MDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2UgSW9UIERheSBAIFRoaW5nTW9ua11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwOi8vdGhpbmdtb25rLmNvbS9lY2xpcHNlLWRheS10YWxrcy5odG1sXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1JlZ2lzdGVyIGZvciB0aGUgRWNsaXBzZSBJb1QgRGF5IGNvLWxvY2F0ZWQgd2l0aCBUaGluZ01vbmsgb24gU2VwdGVtYmVyIDExIGluIExvbmRvbiwgVUsuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMTcgQXVnIDIwMTcgMDg6NTU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtQb3RlbnRpYWwgYWR3YXJlIHBsdWdpbiBvbiBFY2xpcHNlIE1hcmtldHBsYWNlIC0gRWNsaXBzZSBDbGFzcyBEZWNvbXBpbGVyXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzA4MTRfc2VjdXJpdHlfYnVsbGV0aW4ucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0EgbGlzdGluZyBvbiBFY2xpcHNlIE1hcmtldHBsYWNlLCBjYWxsZWQgRWNsaXBzZSBDbGFzcyBEZWNvbXBpbGVyLCBjb250YWlucyBiaW5hcnkgY29kZSB0aGF0IGNvdWxkIGJlIHVzZWQgZm9yIGFkd2FyZSBhbmQgY291bGQgcG90ZW50aWFsbHkgZG93bmxvYWQgZmlsZXMgdG8gRWNsaXBzZSB3b3Jrc3BhY2VzLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDE0IEF1ZyAyMDE3IDEwOjQwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIHwgU3VtbWVyIElzc3VlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvMjAxNy9qdWx5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtUaGUgbGF0ZXN0IEVjbGlwc2UgTmV3c2xldHRlciBpcyBub3cgYXZhaWxhYmxlLiBSZWFkIGl0IGFuZCBsZWFybiBob3cgdG8gdHJ5IG91dCBKYXZhIDkgU3VwcG9ydCBmb3IgRWNsaXBzZSBPeHlnZW4hXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlR1ZSwgMjUgSnVsIDIwMTcgMTA6MDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlQ29uIEV1cm9wZSAyMDE3IHwgU3VibWlzc2lvbnMgQ2xvc2UgaW4gT25lIFdlZWtdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZXVyb3BlMjAxNy9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbVGhlcmXigJlzIHN0aWxsIHRpbWUgdW50aWwgSnVseSAxN3RoLCB0byBnZXQgeW91ciBzdWJtaXNzaW9uIGluIGZvciB0aGlzIHllYXLigJlzIEVjbGlwc2VDb24gRXVyb3BlIGluIEx1ZHdpZ3NidXJnIEdlcm1hbnkuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPk1vbiwgMTAgSnVsIDIwMTcgMDk6MDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE94eWdlbiBOb3cgQXZhaWxhYmxlXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL294eWdlbl1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtXZSdyZSBwcm91ZCB0byBhbm5vdW5jZSB0aGUgYXJyaXZhbCBvZiBFY2xpcHNlIE94eWdlbiwgdGhlIDEydGggYW5udWFsIHNpbXVsdGFuZW91cyByZWxlYXNlIGZyb20gdGhlIEVjbGlwc2UgQ29tbXVuaXR5LiBET1dOTE9BRCBOT1chXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjggSnVuIDIwMTcgMTA6MDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtFY2xpcHNlIE5ld3NsZXR0ZXIgfCBFY2xpcHNlIE94eWdlbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTcvanVuZS9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbRmluZCBvdXQgbW9yZSBhYm91dCB0aGUgbGF0ZXN0IEVjbGlwc2UgU2ltdWx0YW5lb3VzIFJlbGVhc2UgaW4gdGhlIEp1bmUgaXNzdWUgb2YgdGhlIEVjbGlwc2UgTmV3c2xldHRlciFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAyOCBKdW4gMjAxNyAxMDoyNjowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWFybHkgU3VibWlzc2lvbiBEZWFkbGluZSBmb3IgRWNsaXBzZUNvbiBFdXJvcGUgMjAxN11dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE3L2NmcF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTdWJtaXQgeW91ciB0YWxrcyBieSBKdW5lIDMwIHRvIGJlIHNlbGVjdGVkIGZvciBmZWF0dXJpbmcgaW4gdGhlIGVhcmx5IHByb21vdGlvbi4gT2N0b2JlciAyNC0yNiBpbiBMdWR3aWdzYnVyZyBHZXJtYW55Ll1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDI2IEp1biAyMDE3IDIyOjAwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ2FwZWxsYSBJbmR1c3RyeSBDb25zb3J0aXVtIChJQykgQW5ub3VuY2VkIGF0IFBvbGFyU3lzXV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LnBvbGFyc3lzLm9yZy9jYXBlbGxhLWljLWFubm91bmNlZF1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtDYXBlbGxhIElDIHRvIGhvc3QgdGhlIENhcGVsbGEgRWNvc3lzdGVtIHN0YWtlaG9sZGVycyBpbiBhIHZlbmRvciBuZXV0cmFsIHdheSwgb3JnYW5pemVkIGJ5IGFuIG9wZW4gZ292ZXJuYW5jZSBtb2RlbC5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VHVlLCAyMCBKdW4gMjAxNyAwNDowMDowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1JDMyBBdmFpbGFibGUgZm9yIEVjbGlwc2UgT3h5Z2VuIHwgRG93bmxvYWQgTm93XV0+PC90aXRsZT4KKyAgICAgIDxsaW5rPjwhW0NEQVRBW2h0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2Fkcy9pbmRleC1kZXZlbG9wZXIucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0Rvd25sb2FkIGFuZCB0ZXN0IHJlbGVhc2UgY2FuZGlkYXRlIDMgZm9yIEVjbGlwc2UgT3h5Z2VuIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5Nb24sIDEyIEp1biAyMDE3IDE1OjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTGFzdCBDaGFuY2UgdG8gUmVnaXN0ZXIgZm9yIEVjbGlwc2VDb24gRnJhbmNlIDIwMTddXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZnJhbmNlMjAxNy9yZWdpc3RyYXRpb25dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbU2lnbiB1cCBmb3IgbGVhcm5pbmcgYXQgRWNsaXBzZUNvbiBGcmFuY2UsIEp1bmUgMjEtMjIuIFhUZXh0LCBDYXBlbGxhLCBTY2llbmNlLCBEb2NrZXIsIExTUCBhbmQgbXVjaCBtb3JlIV1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDA4IEp1biAyMDE3IDEwOjQ1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbRWNsaXBzZSBOZXdzbGV0dGVyIC0gTGFuZ3VhZ2UgU2VydmVyIFByb3RvY29sIDEwMV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLzIwMTcvbWF5L11dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtFdmVyeXRoaW5nIHlvdSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIExhbmd1YWdlIFNlcnZlciBQcm9jb3RvbCAoYWthIExTUCkgaXMgaW4gdGhpcyBtb250aCdzIG5ld3NsZXR0ZXIhXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPldlZCwgMjQgTWF5IDIwMTcgMDU6MzU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4wPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgICA8aXRlbT4KKyAgICAgIDx0aXRsZT48IVtDREFUQVtJdOKAmXMgdGltZSB0byBvcmdhbmlzZSBFY2xpcHNlIE94eWdlbiBEZW1vQ2FtcHNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cDovL2Jsb2cudHRvaW5lLm5ldC9lbi8yMDE3LzA1LzIzL2l0cy10aW1lLXRvLW9yZ2FuaXNlLWVjbGlwc2Utb3h5Z2VuLWRlbW9jYW1wcy9dXT48L2xpbms+CisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbV2hhdCBpcyBhbiBFY2xpcHNlIERlbW9DYW1wIGFuZCB3aHkgc2hvdWxkIEkgb3JnYW5pc2Ugb25lP11dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UdWUsIDIzIE1heSAyMDE3IDA0OjM1OjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbQ2FzZSBTdHVkeTogRGVwbG95aW5nIEVjbGlwc2UgSW9UIG9uIEdlcm1hbnkncyBEQiBSYWlsd2F5IFN5c3RlbV1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL2lvdC5lY2xpcHNlLm9yZy9yZXNvdXJjZXMvY2FzZS1zdHVkaWVzL0VjbGlwc2UlMjBJb1QlMjBTdWNjZXNzJTIwU3RvcnklMjAtJTIwREIucGRmXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1dlIHdvcmtlZCB3aXRoIERldXRzY2hlIEJhaG4gKERCKSB0byBmaW5kIG91dCBob3cgdGhleSB1c2UgRWNsaXBzZSBJb1QgdGVjaG5vbG9neSBvbiB0aGVpciByYWlsd2F5IHN5c3RlbSFdXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+VGh1LCAxOCBNYXkgMjAxNyAwNDo1NTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW0VjbGlwc2VDb24gRXVyb3BlIDIwMTcgfCBDYWxsIGZvciBQYXBlcnMgT3Blbl1dPjwvdGl0bGU+CisgICAgICA8bGluaz48IVtDREFUQVtodHRwczovL3d3dy5lY2xpcHNlY29uLm9yZy9ldXJvcGUyMDE3L25ld3MvaXRzLXRpbWUtc3VibWl0XV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW1N1Ym1pc3Npb25zIGFyZSBub3cgb3BlbiBmb3IgRWNsaXBzZUNvbiBFdXJvcGUgMjAxNywgT2N0b2JlciAyNCAtIDI2LCBpbiBMdWR3aWdzYnVyZywgR2VybWFueS5dXT48L2Rlc2NyaXB0aW9uPgorICAgICAgPHB1YkRhdGU+V2VkLCAxNyBNYXkgMjAxNyAwOToyOTowMCBFU1Q8L3B1YkRhdGU+CisgICAgICA8Y2F0ZWdvcnk+bmV3czwvY2F0ZWdvcnk+CisgICAgICA8cHJlc3NyZWxlYXNlPjA8L3ByZXNzcmVsZWFzZT4KKyAgICA8L2l0ZW0+IAorICAgICAgIDxpdGVtPgorICAgICAgPHRpdGxlPjwhW0NEQVRBW1Byb2dyYW0gUmVhZHkgZm9yIEVjbGlwc2VDb24gRnJhbmNlIDIwMTddXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZWNvbi5vcmcvZnJhbmNlMjAxNy9jb25mZXJlbmNlL3NjaGVkdWxlL3Nlc3Npb24vMjAxNy0wNi0yMV1dPjwvbGluaz4KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVtTZWUgdGhlIHByb2dyYW0sIGFuZCByZWdpc3RlciBieSBNYXkgMTIgZm9yIHRoZSBiZXN0IHByaWNlLl1dPjwvZGVzY3JpcHRpb24+CisgICAgICA8cHViRGF0ZT5UaHUsIDI3IEFwciAyMDE3IDE3OjEwOjAwIEVTVDwvcHViRGF0ZT4KKyAgICAgIDxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT4KKyAgICAgIDxwcmVzc3JlbGVhc2U+MDwvcHJlc3NyZWxlYXNlPgorICAgIDwvaXRlbT4gCisgICAgPGl0ZW0+CisgICAgICA8dGl0bGU+PCFbQ0RBVEFbTmV3IEVjbGlwc2UgSW9UIE9wZW4gVGVzdGJlZHNdXT48L3RpdGxlPgorICAgICAgPGxpbms+PCFbQ0RBVEFbaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3ByZXNzLXJlbGVhc2UvMjAxNzA0MjZfaW90dGVzdGJlZHMucGhwXV0+PC9saW5rPgorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBW0Fubm91bmNpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSBFY2xpcHNlIElvVCBPcGVuIFRlc3RiZWRzLCBhbiBpbml0aWF0aXZlIHRvIGRyaXZlIGFkb3B0aW9uIG9mIElvVCBvcGVuIHNvdXJjZSBhbmQgb3BlbiBzdGFuZGFyZHMuXV0+PC9kZXNjcmlwdGlvbj4KKyAgICAgIDxwdWJEYXRlPlRodSwgMjcgQXByIDIwMTcgMDk6MDU6MDAgRVNUPC9wdWJEYXRlPgorICAgICAgPGNhdGVnb3J5Pm5ld3M8L2NhdGVnb3J5PgorICAgICAgPHByZXNzcmVsZWFzZT4xPC9wcmVzc3JlbGVhc2U+CisgICAgPC9pdGVtPiAKKyAgPC9jaGFubmVsPgorPC9yc3M+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLmltcGwvZG93bmxvYWRzL2h0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZyZWNvbW1lbmRlcnMlMkZmZWVkcyUyRmlkZS5yc3MgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJlY29tbWVuZGVycy5uZXdzLmltcGwvZG93bmxvYWRzL2h0dHAlM0ElMkYlMkZ3d3cuZWNsaXBzZS5vcmclMkZyZWNvbW1lbmRlcnMlMkZmZWVkcyUyRmlkZS5yc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmMjk5YgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucmVjb21tZW5kZXJzLm5ld3MuaW1wbC9kb3dubG9hZHMvaHR0cCUzQSUyRiUyRnd3dy5lY2xpcHNlLm9yZyUyRnJlY29tbWVuZGVycyUyRmZlZWRzJTJGaWRlLnJzcwpAQCAtMCwwICsxLDMxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CisgICAgPCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgLS0+Cis8c2NyaXB0PihmdW5jdGlvbih3LGQscyxsLGkpe3dbbF09d1tsXXx8W107d1tsXS5wdXNoKHsnZ3RtLnN0YXJ0JzoKK25ldyBEYXRlKCkuZ2V0VGltZSgpLGV2ZW50OidndG0uanMnfSk7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSwKK2o9ZC5jcmVhdGVFbGVtZW50KHMpLGRsPWwhPSdkYXRhTGF5ZXInPycmbD0nK2w6Jyc7ai5hc3luYz10cnVlO2ouc3JjPQorJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD0nK2krZGw7Zi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqLGYpOworfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdkYXRhTGF5ZXInLCdHVE0tNVdMQ1pYQycpOzwvc2NyaXB0PgorPCEtLSBFbmQgR29vZ2xlIFRhZyBNYW5hZ2VyIC0tPiAgICA8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9IldlYm1hc3RlciIvPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcmNoaXZlZCwgb2xkLCBjbG9zZWQsIHN1c3BlbmRlZCwgc2h1dGRvd24sIGNsb3NlZCIvPgorICAgIDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL2ltYWdlcy9mYXZpY29uLmljbyIvPgorICAgIDx0aXRsZT5BcmNoaXZlZCBQcm9qZWN0cyB8IFRoZSBFY2xpcHNlIEZvdW5kYXRpb248L3RpdGxlPgorICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCBzdHlsZXNoZWV0IiBocmVmPSIvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9zb2xzdGljZS9wdWJsaWMvc3R5bGVzaGVldHMvcXVpY2tzaWx2ZXIubWluLmNzcz92MC4xNzIiLz4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIC0gaG9tZSB0byBhIGdsb2JhbCBjb21tdW5pdHksIHRoZSBFY2xpcHNlIElERSwgSmFrYXJ0YSBFRSBhbmQgb3ZlciAzNzUgb3BlbiBzb3VyY2UgcHJvamVjdHMsIGluY2x1ZGluZyBydW50aW1lcywgdG9vbHMgYW5kIGZyYW1ld29ya3MuIi8+Cis8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gLSBob21lIHRvIGEgZ2xvYmFsIGNvbW11bml0eSwgdGhlIEVjbGlwc2UgSURFLCBKYWthcnRhIEVFIGFuZCBvdmVyIDM3NSBvcGVuIHNvdXJjZSBwcm9qZWN0cywgaW5jbHVkaW5nIHJ1bnRpbWVzLCB0b29scyBhbmQgZnJhbWV3b3Jrcy4iLz4KKzxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9zb2xzdGljZS9wdWJsaWMvaW1hZ2VzL2xvZ28vZWNsaXBzZS1mb3VuZGF0aW9uLTIwMHgyMDAucG5nIi8+Cis8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkFyY2hpdmVkIFByb2plY3RzIHwgVGhlIEVjbGlwc2UgRm91bmRhdGlvbiIvPgorPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOndpZHRoIiBjb250ZW50PSIyMDAiLz4KKzxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTpoZWlnaHQiIGNvbnRlbnQ9IjIwMCIvPgorPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkFyY2hpdmVkIFByb2plY3RzIHwgVGhlIEVjbGlwc2UgRm91bmRhdGlvbiIvPgorPG1ldGEgaXRlbXByb3A9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIC0gaG9tZSB0byBhIGdsb2JhbCBjb21tdW5pdHksIHRoZSBFY2xpcHNlIElERSwgSmFrYXJ0YSBFRSBhbmQgb3ZlciAzNzUgb3BlbiBzb3VyY2UgcHJvamVjdHMsIGluY2x1ZGluZyBydW50aW1lcywgdG9vbHMgYW5kIGZyYW1ld29ya3MuIi8+Cis8bWV0YSBpdGVtcHJvcD0iaW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2Uub3JnLWNvbW1vbi90aGVtZXMvc29sc3RpY2UvcHVibGljL2ltYWdlcy9sb2dvL2VjbGlwc2UtZm91bmRhdGlvbi00MDB4NDAwLnBuZyIvPgorPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJARWNsaXBzZUZkbiIvPgorPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5Ii8+Cis8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJBcmNoaXZlZCBQcm9qZWN0cyB8IFRoZSBFY2xpcHNlIEZvdW5kYXRpb24iLz4KKzxtZXRhIG5hbWU9InR3aXR0ZXI6dXJsIiBjb250ZW50PSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3Byb2plY3RzL2FyY2hpdmVzLnBocCIvPgorPG1ldGEgbmFtZT0idHdpdHRlcjpkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEVjbGlwc2UgRm91bmRhdGlvbiAtIGhvbWUgdG8gYSBnbG9iYWwgY29tbXVuaXR5LCB0aGUgRWNsaXBzZSBJREUsIEpha2FydGEgRUUgYW5kIG92ZXIgMzc1IG9wZW4gc291cmNlIHByb2plY3RzLCBpbmNsdWRpbmcgcnVudGltZXMsIHRvb2xzIGFuZCBmcmFtZXdvcmtzLiIvPgorPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9zb2xzdGljZS9wdWJsaWMvaW1hZ2VzL2xvZ28vZWNsaXBzZS1mb3VuZGF0aW9uLTQwMHg0MDAucG5nIi8+Cis8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUxpYnJlK0ZyYW5rbGluOml0YWwsd2dodEAwLDEwMDswLDIwMDswLDMwMDswLDQwMDswLDUwMDswLDYwMDswLDcwMDswLDgwMDswLDkwMDsxLDEwMDsxLDIwMDsxLDMwMDsxLDQwMDsxLDUwMDsxLDYwMDsxLDcwMDsxLDgwMDsxLDkwMCZmYW1pbHk9Um9ib3RvOml0YWwsd2dodEAwLDEwMDswLDMwMDswLDQwMDswLDUwMDswLDcwMDswLDkwMDsxLDEwMDsxLDMwMDsxLDQwMDsxLDUwMDsxLDcwMDsxLDkwMCZkaXNwbGF5PXN3YXAiIHJlbD0icHJlY29ubmVjdCBzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorICAgIDxzY3JpcHQ+IHZhciBlY2xpcHNlX29yZ19jb21tb24gPSB7InNldHRpbmdzIjp7ImNvb2tpZXNfY2xhc3MiOnsibmFtZSI6ImVjbGlwc2Vfc2V0dGluZ3MiLCJlbmFibGVkIjoxfX19PC9zY3JpcHQ+ICA8L2hlYWQ+CisgIDxib2R5IGlkPSJib2R5X3NvbHN0aWNlIj4KKyAgICA8IS0tIEdvb2dsZSBUYWcgTWFuYWdlciAobm9zY3JpcHQpIC0tPgorPG5vc2NyaXB0PjxpZnJhbWUgc3JjPSJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ucy5odG1sP2lkPUdUTS01V0xDWlhDIgoraGVpZ2h0PSIwIiB3aWR0aD0iMCIgc3R5bGU9ImRpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbiI+PC9pZnJhbWU+PC9ub3NjcmlwdD4KKzwhLS0gRW5kIEdvb2dsZSBUYWcgTWFuYWdlciAobm9zY3JpcHQpIC0tPiAgICA8YSBjbGFzcz0ic3Itb25seSIgaHJlZj0iI2NvbnRlbnQiPlNraXAgdG8gbWFpbiBjb250ZW50PC9hPgorICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlci13cmFwcGVyIiBpZD0iaGVhZGVyLXdyYXBwZXIiPgorICAgICAgPGRpdiBjbGFzcz0iY2xlYXJmaXggdG9vbGJhci1jb250YWluZXItd3JhcHBlciI+CisgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXJpZ2h0IHRvb2xiYXItcm93IHJvdyBoaWRkZW4tcHJpbnQiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0yNCByb3ctdG9vbGJhci1jb2wiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LWlubGluZSI+CisgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0idG9vbGJhci1saW5rIiBocmVmPSJodHRwczovL2FjY291bnRzLmVjbGlwc2Uub3JnL3VzZXIvbG9naW4vP3Rha2VtZWJhY2s9aHR0cCUzQSUyRiUyRnd3dy5lY2xpcHNlLm9yZyUyRnByb2plY3RzJTJGYXJjaGl2ZXMucGhwIj48aSBjbGFzcz0iZmEgZmEtc2lnbi1pbiI+PC9pPiBMb2cgaW48L2E+PC9saT4KKyAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJ0b29sYmFyLWxpbmsgdG9vbGJhci1tYW5hZ2UtY29va2llcyBkcm9wZG93bi10b2dnbGUiPjxpIGNsYXNzPSJmYSBmYS13cmVuY2giPjwvaT4gTWFuYWdlIENvb2tpZXM8L2E+PC9saT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+ICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxkaXYgY2xhc3M9InJvdyIgaWQ9ImhlYWRlci1yb3ciPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTUgY29sLW1kLTQiIGlkPSJoZWFkZXItbGVmdCI+CisgICAgICAgIDxkaXYgY2xhc3M9IndyYXBwZXItbG9nby1kZWZhdWx0Ij48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+PGltZyBjbGFzcz0ibG9nby1lY2xpcHNlLWRlZmF1bHQgaGlkZGVuLXhzIiBhbHQ9IkVjbGlwc2Uub3JnIGxvZ28iIHdpZHRoPSIxNjAiIHNyYz0iLy93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9zb2xzdGljZS9wdWJsaWMvaW1hZ2VzL2xvZ28vZWNsaXBzZS1mb3VuZGF0aW9uLXdoaXRlLW9yYW5nZS5zdmciLz48L2E+PC9kaXY+CisgICAgICA8L2Rpdj4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTkgY29sLW1kLTIwIG1hcmdpbi10b3AtMTAiIGlkPSJtYWluLW1lbnUtd3JhcHBlciI+CisgICAgICA8ZGl2IGNsYXNzPSJmbG9hdC1yaWdodCBoaWRkZW4teHMiIGlkPSJidG4tY2FsbC1mb3ItYWN0aW9uIj48YSBocmVmPSIvZG93bmxvYWRzLyIgY2xhc3M9ImJ0biBidG4taHVnZSBidG4td2FybmluZyI+PGkgY2xhc3M9ImZhIGZhLWRvd25sb2FkIj48L2k+IERvd25sb2FkPC9hPjwvZGl2PiAgICA8ZGl2IGNsYXNzPSJuYXZiYXIgeWFtbSBmbG9hdC1zbS1yaWdodCIgaWQ9Im1haW4tbWVudSI+CisgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWNvbGxhcHNlIGNvbGxhcHNlIiBpZD0ibmF2YmFyLW1haW4tbWVudSI+CisgICAgICA8dWwgY2xhc3M9Im5hdiBuYXZiYXItbmF2Ij4KKyAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcHJvamVjdHMvIiB0YXJnZXQ9Il9zZWxmIj5Qcm9qZWN0czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy93b3JraW5nZ3JvdXBzLyIgdGFyZ2V0PSJfc2VsZiI+V29ya2luZyBHcm91cHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9tZW1iZXJzaGlwLyIgdGFyZ2V0PSJfc2VsZiI+TWVtYmVyczwvYT48L2xpPiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24gdmlzaWJsZS14cyI+PGEgaHJlZj0iIyIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIj5Db21tdW5pdHkgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPjx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYXJrZXRwbGFjZS5lY2xpcHNlLm9yZyI+TWFya2V0cGxhY2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL2V2ZW50cy5lY2xpcHNlLm9yZyI+RXZlbnRzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucGxhbmV0ZWNsaXBzZS5vcmcvIj5QbGFuZXQgRWNsaXBzZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2NvbW11bml0eS9lY2xpcHNlX25ld3NsZXR0ZXIvIj5OZXdzbGV0dGVyPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3VzZXIvRWNsaXBzZUZkbiI+VmlkZW9zPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYmxvZ3MuZWNsaXBzZS5vcmciPkJsb2dzPC9hPjwvbGk+PC91bD48L2xpPjxsaSBjbGFzcz0iZHJvcGRvd24gdmlzaWJsZS14cyI+PGEgaHJlZj0iIyIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIj5QYXJ0aWNpcGF0ZSA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+PHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij48bGk+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvIj5SZXBvcnQgYSBCdWc8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9mb3J1bXMvIj5Gb3J1bXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9tYWlsLyI+TWFpbGluZyBMaXN0czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3dpa2kuZWNsaXBzZS5vcmcvIj5XaWtpPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5lY2xpcHNlLm9yZy9JUkMiPklSQzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcmVzZWFyY2gvIj5SZXNlYXJjaDwvYT48L2xpPjwvdWw+PC9saT48bGkgY2xhc3M9ImRyb3Bkb3duIHZpc2libGUteHMiPjxhIGhyZWY9IiMiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSI+RWNsaXBzZSBJREUgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPjx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj5Eb3dubG9hZDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2VpZGUiPkxlYXJuIE1vcmU8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9oZWxwLmVjbGlwc2Uub3JnIj5Eb2N1bWVudGF0aW9uPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZ2V0dGluZ19zdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQgLyBTdXBwb3J0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvY29udHJpYnV0ZS8iPkhvdyB0byBDb250cmlidXRlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvaWRlLyI+SURFIGFuZCBUb29sczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5lY2xpcHNlLm9yZy9mb3J1bXMvaW5kZXgucGhwL2YvODkvIj5OZXdjb21lciBGb3J1bTwvYT48L2xpPjwvdWw+PC9saT4gICAgICAgICAgPCEtLSBNb3JlIC0tPgorICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24gZWNsaXBzZS1tb3JlIGhpZGRlbi14cyI+CisgICAgICAgICAgICA8YSBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIHJvbGU9ImJ1dHRvbiI+TW9yZTxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8IS0tIENvbnRlbnQgY29udGFpbmVyIHRvIGFkZCBwYWRkaW5nIC0tPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InlhbW0tY29udGVudCI+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImNvbC1zbS04IGxpc3QtdW5zdHlsZWQiPjxsaT48cD48c3Ryb25nPkNvbW11bml0eTwvc3Ryb25nPjwvcD48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbWFya2V0cGxhY2UuZWNsaXBzZS5vcmciPk1hcmtldHBsYWNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9ldmVudHMuZWNsaXBzZS5vcmciPkV2ZW50czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnBsYW5ldGVjbGlwc2Uub3JnLyI+UGxhbmV0IEVjbGlwc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9jb21tdW5pdHkvZWNsaXBzZV9uZXdzbGV0dGVyLyI+TmV3c2xldHRlcjwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS91c2VyL0VjbGlwc2VGZG4iPlZpZGVvczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2Jsb2dzLmVjbGlwc2Uub3JnIj5CbG9nczwvYT48L2xpPjwvdWw+PHVsIGNsYXNzPSJjb2wtc20tOCBsaXN0LXVuc3R5bGVkIj48bGk+PHA+PHN0cm9uZz5QYXJ0aWNpcGF0ZTwvc3Ryb25nPjwvcD48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy8iPlJlcG9ydCBhIEJ1ZzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2ZvcnVtcy8iPkZvcnVtczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL21haWwvIj5NYWlsaW5nIExpc3RzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5lY2xpcHNlLm9yZy8iPldpa2k8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93aWtpLmVjbGlwc2Uub3JnL0lSQyI+SVJDPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9yZXNlYXJjaC8iPlJlc2VhcmNoPC9hPjwvbGk+PC91bD48dWwgY2xhc3M9ImNvbC1zbS04IGxpc3QtdW5zdHlsZWQiPjxsaT48cD48c3Ryb25nPkVjbGlwc2UgSURFPC9zdHJvbmc+PC9wPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj5Eb3dubG9hZDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2VpZGUiPkxlYXJuIE1vcmU8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9oZWxwLmVjbGlwc2Uub3JnIj5Eb2N1bWVudGF0aW9uPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZ2V0dGluZ19zdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQgLyBTdXBwb3J0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvY29udHJpYnV0ZS8iPkhvdyB0byBDb250cmlidXRlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvaWRlLyI+SURFIGFuZCBUb29sczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5lY2xpcHNlLm9yZy9mb3J1bXMvaW5kZXgucGhwL2YvODkvIj5OZXdjb21lciBGb3J1bTwvYT48L2xpPjwvdWw+ICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgCisgICAgICA8L3VsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9Im5hdmJhci1oZWFkZXIiPgorICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXZiYXItdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtdGFyZ2V0PSIjbmF2YmFyLW1haW4tbWVudSI+CisgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgIDwvYnV0dG9uPgorICAgICAgPGRpdiBjbGFzcz0id3JhcHBlci1sb2dvLW1vYmlsZSI+PGEgY2xhc3M9Im5hdmJhci1icmFuZCB2aXNpYmxlLXhzIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+PGltZyBjbGFzcz0ibG9nby1lY2xpcHNlLWRlZmF1bHQtbW9iaWxlIGltZy1yZXNwb25zaXZlIiBhbHQ9IkVjbGlwc2Uub3JnIGxvZ28iIHdpZHRoPSIxNjAiIHNyYz0iLy93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZS5vcmctY29tbW9uL3RoZW1lcy9zb2xzdGljZS9wdWJsaWMvaW1hZ2VzL2xvZ28vZWNsaXBzZS1mb3VuZGF0aW9uLXdoaXRlLW9yYW5nZS5zdmciLz48L2E+PC9kaXY+ICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKyAgPC9oZWFkZXI+CisgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImRlZmF1bHQtYnJlYWRjcnVtYnMgaGlkZGVuLXByaW50IGJyZWFkY3J1bWJzLWRlZmF1bHQtbWFyZ2luIiBpZD0iYnJlYWRjcnVtYiI+CisgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICA8aDMgY2xhc3M9InNyLW9ubHkiPkJyZWFkY3J1bWJzPC9oMz4KKyAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMjQiPjxvbCBjbGFzcz0iYnJlYWRjcnVtYiI+PGxpPjxhIGhyZWY9Ii8iPkhvbWU8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wcm9qZWN0cyI+UHJvamVjdHM8L2E+PC9saT48bGkgY2xhc3M9ImFjdGl2ZSI+QXJjaGl2ZWQgUHJvamVjdHM8L2xpPjwvb2w+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9zZWN0aW9uPiA8IS0tIC8jYnJlYWRjcnVtYiAtLT4KKyAgICAgIDxtYWluIGlkPSJjb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0ibm92YUNvbnRlbnQgY29udGFpbmVyIiBpZD0ibm92YUNvbnRlbnQiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0iY29sLW1kLTE4IG1haW4tY29sLWNvbnRlbnQiPgkgCisKKyAgICA8ZGl2IGlkPSJtaWRjb2x1bW4iPgorCSAgPGgyPkFyY2hpdmVkIEVjbGlwc2UgUHJvamVjdHM8L2gyPgorICAgICAgPHA+IFlvdSBhcmUgc2VlaW5nIHRoaXMgYmVjYXVzZSB0aGUgcHJvamVjdCB5b3Ugd2VyZSBsb29raW5nIGZvciBoYXMgYmVlbiBhcmNoaXZlZC4gIFdoZW4gcHJvamVjdHMgYXJlIGFyY2hpdmVkIHRoZWlyIGRhdGEoZG93bmxvYWRzLHNvdXJjZSBhbmQgd2Vic2l0ZSksIGlzIGNvbGxlY3RlZCBpbnRvIGEgc2luZ2xlIHRhci5neiBmaWxlLjwvcD4gIAorICAgICAgPHA+PGg0PlBsZWFzZSBub3RlOiBTb21lIHByb2plY3RzIGRpZCBub3QgaGF2ZSBhbGwgb2YgdGhlIGFib3ZlIGRhdGEuPC9oND48L3A+CisgICAgICA8cD48aDQ+UGxlYXNlIG5vdGU6IFRoZSBzb3VyY2UgZmlsZXMgKGlmIGF2YWlsYWJsZSkgaW5jbHVkZWQgaW4gdGhlc2UgZmlsZXMgYXJlIGRpcmVjdCBjb3BpZXMgb2YgdGhlIGF2YWlsYWJsZSBDVlMvU1ZOIGRhdGEuICBZb3Ugd2lsbCBuZWVkIHRvIGxvYWQgdGhlbSBpbnRvIGEgbG9jYWwgQ1ZTL1NWTiByZXBvc2l0b3J5IHRvIGFjY2VzcyB0aGUgaGlzdG9yeS48L2g0PjwvcD4KKyAgICAgIDxwPjxoND5QbGVhc2Ugbm90ZTogU29tZSBvZiB0aGVzZSBhcmNoaXZlcyBhcmUgbGFyZ2VyIHRoYW4gM0dCPC9oND48L3A+CisgICAgICAKKyAgICAgIDxkaXYgaWQ9ImhvbWVpdGVtIj4KKyAgICAgICAgPC9icj4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYWxmLnRneiI+QUxGPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAwOTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYWxiaXJlby50Z3oiPkFsYmlyZW88L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDExPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9hbTMudGd6Ij5BTTM8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTm92ZW1iZXIgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYW50ZW5uYS50Z3oiPkFudGVubmE8L2E+IHByb2plY3QuICBBcmNoaXZlZDogRmVicnVhcnkgMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYXByaWNvdC50Z3oiPkFwcmljb3Q8L2E+IHByb2plY3QuICBBcmNoaXZlZDogQXVndXN0IDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2Fwb2dlZS50Z3oiPkFwb2dlZTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2F0Zi50Z3oiPkFURjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAyMDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYXRoZW5hLnRneiI+QXRoZW5hPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYW13LnRneiI+QU1XPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMTU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2JsaW5raS50Z3oiIGFsdD0iRFNEUCBCbGlua2kgQXJjaGl2ZSIgPkRTRFAgQmxpbmtpPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogT2N0b2JlciAyMDEwLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvYnBtbi50Z3oiPkJQTU48L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9idWNrbWluc3Rlci50Z3oiPkJ1Y2ttaW5zdGVyPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2NkdGsudGd6Ij5DRFRLPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvY21lLXByb2plY3QudGFyLmd6Ij5DTUU8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDA2PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9jb3JvbmEudGd6Ij5Db3JvbmE8L2E+IHByb2plY3QuICBBcmNoaXZlZDogQXByaWwgMjAxMDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvY29zbW9zLnRneiI+Q29zbW9zPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvY29ib2wudGd6Ij5Db2JvbDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBGZWJydWFyeSAyMDEwPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9kYW1vcy50Z3oiPkRhbW9zPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2RkLnRneiIgYWx0PSJEU0RQIEREIEFyY2hpdmUiID5EU0RQIEREPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogT2N0b2JlciAyMDEwLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZHNkcC50Z3oiIGFsdD0iRFNEUCBBcmNoaXZlIiA+RFNEUDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IFNlcHRlbWJlciAyMDExLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZG9jMm1vZGVsLnRneiIgYWx0PSJEb2MyTW9kZWwgQXJjaGl2ZSIgPkRvYzJNb2RlbDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNS48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2VhdG9wLnRneiI+TW9kZWxpbmcgRUFUb3A8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZWRqZS50Z3oiPklPVCBFZGplPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTg8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2VzbC50Z3oiPkVTTDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2VtZmluZGV4LnRneiI+RU1GaW5kZXg8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVseSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9lcmNwLnRneiI+RVJDUDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBEZWNlbWJlciAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9leGFtcGxlcy50Z3oiPkV4YW1wbGVzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZW1mLWZhY2V0LnRneiI+RU1GIEZhY2V0PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1heSAyMDIwPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9mZWF0dXJlbW9kZWwudGd6Ij5GZWF0dXJlbW9kZWw8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAxNTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZmx1eC50Z3oiPkZsdXg8L2E+IHByb2plY3QuICBBcmNoaXZlZDogRmVicnVhcnkgMjAxOTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZnByb2oudGd6Ij5GcHJvajwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2dhbm9tYXRpYy50Z3oiPkdhbm9tYXRpYzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2dlbXMudGd6Ij5HZW1zPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZ2VvYmVuY2gudGd6Ij5HZW9CZW5jaDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXJjaCAyMDIxPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5sb2NhdGlvbnRlY2gub3JnL2FyY2hpdmVkX3Byb2plY3RzL2dlb2ZmLnRneiI+R2VvZmY8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWF5IDIwMTc8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2dsaW1tZXIudGd6Ij5HbGltbWVyPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZy1lY2xpcHNlLnRneiI+Zy1FY2xpcHNlPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZ2VmM2QudGd6Ij5HRUYgM0Q8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvZ3lyZXgudGd6Ij5neXJleDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXJjaCAyMDE4PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9oaWJhY2hpLnRneiI+SGliYWNoaTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2hpcC50Z3oiPkhpcDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBBdWd1c3QgMjAxOTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvaHVkc29uLnRneiI+SHVkc29uPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMjE8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2lhbS50Z3oiPklhbTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2luY3F1ZXJ5LnRneiI+SW5jcXVlcnk8L2E+IHByb2plY3QuICBBcmNoaXZlZDogRmVicnVhcnkgMjAxNjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvaW1tLnRneiI+SU1NPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvaWRlNGVkdS50Z3oiPklERTRFRFU8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDE0PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9pbXAudGd6Ij5JbXA8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDE0PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9qYXZhLWVlLWNvbmZpZy50Z3oiPkphdmEtZWUtY29uZmlnPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bHkgMjAxODwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvamNybS50Z3oiIGFsdD0iSkNSTSBhcmNoaXZlIiA+SkNSTTwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEp1bHkgMjAxMy48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2pldC50Z3oiIGFsdD0iSkVUIGFyY2hpdmUiID5KRVQ8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBNYXkgMjAyMC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2pzNGVtZi50Z3oiIGFsdD0iSnM0ZW1mIGFyY2hpdmUiID5KczRlbWY8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTUuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9raXNvLXByb2plY3QudGFyLmd6Ij5Lb2k8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVseSAyMDIxPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9rb2ktcHJvamVjdC50YXIuZ3oiPktvaTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBBcHJpbCAyMDA2PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9rb25la2kudGd6Ij5Lb25la2k8L2E+IHByb2plY3QuICBBcmNoaXZlZDogU2VwdGVtYmVyIDIwMTU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2tlcGxlci50Z3oiPktlcGxlcjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKdWx5IDIwMDg8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL2tyaWtraXQudGd6Ij5Lcmlra2l0PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE9jdG9iZXIgMjAxNzwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbGFzemxvLXByb2plY3QudGFyLmd6Ij5MYXN6bG88L2E+IHByb2plY3QuICBBcmNoaXZlZDogRGVjZW1iZXIgMjAwNjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbGVwaWRvLXByb2plY3QudGFyLmd6Ij5MZXBpZG88L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVuZSAyMDA2PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9tYXluc3RhbGwudGd6Ij5NYXluc3RhbGw8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSmFudWFyeSAyMDExPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9tZGRpLWFyY2hpdmUudGFyLmd6IiBhbHQ9Ik1ERGkgQXJjaGl2ZSIgPk1ERGk8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBBdWd1c3QgMjAwOC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL21paGluaS50Z3oiPk1paGluaTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBTZXB0ZW1iZXIgMjAxNTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbWludC50Z3oiIGFsdD0iTWludCBhcmNoaXZlIiA+TWludDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTIuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9tb2RlbGluZy5tZHQuZW9kbS50Z3oiIGFsdD0iTURULkVPRE0gQXJjaGl2ZSIgPk1EVCBFT0RNPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogT2N0b2JlciAyMDA4LjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbW9kZWxpbmcucG1mLnRneiIgYWx0PSJtb2RlbGluZyBQTUYgQXJjaGl2ZSIgPk1vZGVsaW5nIFBNRjwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IFNlcHRlbWJlciAyMDE5LjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbW9mc2NyaXB0LnRneiIgYWx0PSJNb2ZzY3JpcHQgYXJjaGl2ZSIgPk1vZnNjcmlwdDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTIuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9tc3QudGd6IiBhbHQ9Ik1TVCBhcmNoaXZlIiA+TURUIE1TVDwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTIuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9tdGYudGd6IiBhbHQ9Ik1URiBhcmNoaXZlIiA+TVRGPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogTm92ZW1iZXIgMjAxMi48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL214Zi50Z3oiIGFsdD0iTVhGIGFyY2hpdmUiID5NWEY8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbmFiLnRneiIgYWx0PSJEU0RQIE5hYiBBcmNoaXZlIiA+RFNEUCBOYWI8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBPY3RvYmVyIDIwMTAuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9lbWY0bmV0LnRneiIgYWx0PSJFTUY0TmV0IGFyY2hpdmUiID5FTUY0TmV0PC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogSmFudWFyeSAyMDE1LjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvbmV0NGoudGd6IiBhbHQ9Ik5ldDRKIGFyY2hpdmUiID5OZXQ0SjwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEp1bmUgMjAxMC48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL29oZi50Z3oiPk9IRjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL29mbXAudGd6Ij5PRk1QPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvb21lbGV0LXByb2plY3QudGFyLmd6Ij5PTUVMRVQ8L2E+IHByb2plY3QuICBBcmNoaXZlZDogQXVndXN0IDIwMDU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL29ybWYudGd6Ij5Pcm1mPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcGFja2FnZS1kcm9uZS50Z3oiPlBhY2thZ2UtZHJvbmU8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcGFweXJ1cy14dHVtbC50Z3oiPlBhcHlydXMteHR1bWw8L2E+IHByb2plY3QuICBBcmNoaXZlZDogU2VwdGVtYmVyIDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3BhdmUudGd6Ij5QYXZlPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IERlY2VtYmVyIDIwMTI8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3Bob2VuaXgudGd6Ij5QaG9lbml4PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEZlYnJ1YXJ5IDIwMTMgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9waWNhc3NvLnRneiI+UGljYXNzbzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAxOSA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3BtZi50Z3oiIGFsdD0iUE1GIGFyY2hpdmUiID5QTUY8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9wb2xsaW5hdGUtcHJvamVjdC50YXIuZ3oiPlBvbGluYXRlPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IERlY2VtYmVyIDIwMDU8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3BvbnRlLnRneiI+UG9udGU8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcXVlcnkyLnRneiIgYWx0PSJRdWVyeTIgYXJjaGl2ZSIgPkVNRiBRdWVyeTI8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBNYXkgMjAxMy48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmxvY2F0aW9udGVjaC5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcmFzdGVyLnRneiI+UmFzdGVyPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxODwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvcmF0LnRneiI+UmF0PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1heSAyMDEyPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9yZWNvbW1lbmRlcnMudGd6Ij5SZWNvbW1lbmRlcnM8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVseSAyMDE5PC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9yZWNvbW1lbmRlcnMuaW5jdWJhdG9yLnRneiI+UmVjb21tZW5kZXJzIGluY3ViYXRvcjwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBPY3RvYmVyIDIwMTkgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9yZW11cy50Z3oiPlJlbXVzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1heSAyMDIwPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9yaXNldjJnLnRneiI+UmlzZXYyZzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKYW51YXJ5IDIwMTk8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3J0cC50Z3oiPlBhY2thZ2luZyBSVFA8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc2J2ci50Z3oiIGFsdD0iU0JWUiBhcmNoaXZlIiA+U0JWUjwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IEp1bHkgMjAxMy48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NjYWRhLnRneiIgYWx0PSJTQ0FEQSBhcmNoaXZlIiA+U0NBREE8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBNYXJjaCAyMDIxLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc2RvLnRneiIgYWx0PSJFTUZUIFNETyBhcmNoaXZlIiA+U0RPPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogSnVseSAyMDEzLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc2VydnVzLnRneiIgYWx0PSJTZXJ2dXMgYXJjaGl2ZSIgPlNlcnZ1czwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTIuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9zZWFyY2gudGd6IiBhbHQ9IkVNRlQgU2VhcmNoIGFyY2hpdmUiID5TZWFyY2g8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBKdWx5IDIwMTMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy9za2V0Y2gudGd6IiBhbHQ9IlNrZXRjaCBhcmNoaXZlIiA+U2tldGNoPC9hPiBwcm9qZWN0LiBBcmNoaXZlZDogSmFudWFyeSAyMDE0LjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc29jLnRneiI+U09DPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc3BhY2VzLnRneiI+U3BhY2VzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxMTwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc2NhbGFtb2R1bGVzLnRneiI+U2NhbGFtb2R1bGVzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEp1bHkgMjAxMDwvcD4gCisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3NtYXJ0aG9tZS50Z3oiPlNtYXJ0aG9tZTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAyMDwvcD4gCisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3N0ZWxsYXRpb24tcHJvamVjdC50YXIuZ3oiPlN0ZWxsYXRpb248L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVuZSAyMDA1IDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc3RhcmR1c3QudGd6Ij5TdGFyZHVzdDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDE3IDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc3RwLnRneiI+U1RQPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IFNlcHRlbWJlciAyMDEyIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvc3dvcmRmaXNoLnRneiI+U3dvcmRmaXNoPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxNCA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3Rjcy50Z3oiIGFsdD0iVENTIGFyY2hpdmUiID5UQ1M8L2E+IHByb2plY3QuIEFyY2hpdmVkOiBOb3ZlbWJlciAyMDEyLjwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdGVtcG9yYWxpdHkudGd6IiBhbHQ9IlRlbXBvcmFsaXR5IGFyY2hpdmUiID5UZW1wb3JhbGl0eTwvYT4gcHJvamVjdC4gQXJjaGl2ZWQ6IE5vdmVtYmVyIDIwMTIuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy90bXcudGd6Ij5UTVc8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAxMiA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3RwdHAubW9uaXRvcmluZy50Z3oiPlRQVFAgTW9uaXRvcmluZzwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKdW5lIDIwMTAgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy90cHRwLnRneiI+VFBUUDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBNYXkgMjAxNiAgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy90cmlxdWV0cnVtLnRneiI+VHJpcXVldHJ1bTwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBPY3QgMjAyMSAgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy91bWxnZW4udGd6Ij5VTUxHZW48L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWFyY2ggMjAyMSA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3VtbHgudGd6Ij5VbWx4PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IERlY2VtYmVyIDIwMTIgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy91ZmFjZWtpdC50Z3oiPlVGYWNla2l0PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IE1hcmNoIDIwMTQgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy92ZS50Z3oiPlZpc3VhbCBlZGl0b3I8L2E+IHByb2plY3QuICBBcmNoaXZlZDogSnVuZSAyMDExIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMvdnRwLnRneiI+Vm9pY2UgVG9vbHM8L2E+IHByb2plY3QuICBBcmNoaXZlZDogTWF5IDIwMTYgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy93aGlza2Vycy50Z3oiPldoaXNrZXJzPC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IEphbnVhcnkgMjAxOSA8L3A+CisgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2FyY2hpdmVkX3Byb2plY3RzL3dvb2xzZXkudGd6Ij5Xb29sc2V5PC9hPiBwcm9qZWN0LiAgQXJjaGl2ZWQ6IERlY2VtYmVyIDIwMTIgPC9wPgorICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9hcmNoaXZlZF9wcm9qZWN0cy93dHAuZGF0YXRvb2xzLnRneiI+V1RQIERhdGF0b29sczwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBGZWJydWFyeSAyMDEzIDwvcD4KKyAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvYXJjaGl2ZWRfcHJvamVjdHMveHRlbmQudGd6Ij5YdGVuZDwvYT4gcHJvamVjdC4gIEFyY2hpdmVkOiBKdW5lIDIwMTMgPC9wPiAgICAgICAgICAJICAKKwkgIDwvZGl2PgorCTwvZGl2PgorCQorPC9kaXY+PGRpdiBjbGFzcz0iY29sLW1kLTYgbWFpbi1jb2wtc2lkZWJhci1uYXYiPiAgPCEtLSBuYXYgLS0+CisgIDxhc2lkZSBjbGFzcz0ibWFpbi1zaWRlYmFyLWRlZmF1bHQtbWFyZ2luIiBpZD0ibWFpbi1zaWRlYmFyIj4KKyAgICAKKyAgICA8dWwgY2xhc3M9InVsLWxlZnQtbmF2IGZhLXVsIGhpZGRlbi1wcmludCIgaWQ9ImxlZnRuYXYiIHJvbGU9InRhYmxpc3QiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCBmYS1mdyI+PC9pPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPkhvbWU8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCBmYS1mdyI+PC9pPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnIj5XaWtpPC9hPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvYXNpZGU+CisgIDwvZGl2PjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvbWFpbj48cCBpZD0iYmFjay10by10b3AiPgorICA8YSBjbGFzcz0idmlzaWJsZS14cyIgaHJlZj0iI3RvcCI+QmFjayB0byB0aGUgdG9wPC9hPgorPC9wPgorICA8ZGl2IGNsYXNzPSJlY2xpcHNlZmRuLWZlYXR1cmVkLXN0b3J5IGZlYXR1cmVkLWZvb3RlciIgZGF0YS1wdWJsaXNoLXRhcmdldD0iZWNsaXBzZV9vcmciPjxkaXYgY2xhc3M9ImNvbnRhaW5lciBmZWF0dXJlZC1jb250YWluZXIiPjwvZGl2PjwvZGl2Pjxmb290ZXIgaWQ9InNvbHN0aWNlLWZvb3RlciI+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbC1zbS02IGhpZGRlbi1wcmludCIgaWQ9ImZvb3Rlci1lY2xpcHNlLWZvdW5kYXRpb24iPgorICAgICAgICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5FY2xpcHNlIEZvdW5kYXRpb248L2gyPgorICAgIDx1bCBjbGFzcz0ibmF2Ij48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvIj5BYm91dCBVczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9mb3VuZGF0aW9uL2NvbnRhY3QucGhwIj5Db250YWN0IFVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG9uYXRlIj5Eb25hdGU8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9tZW1iZXJzaGlwLyI+TWVtYmVyczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvIj5Hb3Zlcm5hbmNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9Db21tdW5pdHlfQ29kZV9vZl9Db25kdWN0LnBocCI+Q29kZSBvZiBDb25kdWN0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYXJ0d29yay8iPkxvZ28gYW5kIEFydHdvcms8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZm91bmRhdGlvbi9kaXJlY3RvcnMucGhwIj5Cb2FyZCBvZiBEaXJlY3RvcnM8L2E+PC9saT48L3VsPiAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb2wtc20tNiBoaWRkZW4tcHJpbnQiIGlkPSJmb290ZXItbGVnYWwiPgorICAgICAgICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5MZWdhbDwvaDI+CisgICAgPHVsIGNsYXNzPSJuYXYiPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL3ByaXZhY3kucGhwIj5Qcml2YWN5IFBvbGljeTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL3Rlcm1zb2Z1c2UucGhwIj5UZXJtcyBvZiBVc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jb3B5cmlnaHQucGhwIj5Db3B5cmlnaHQgQWdlbnQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLyI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsLyI+TGVnYWwgUmVzb3VyY2VzPC9hPjwvbGk+PC91bD4gICAgICA8L3NlY3Rpb24+CisgICAgICA8c2VjdGlvbiBjbGFzcz0iY29sLXNtLTYgaGlkZGVuLXByaW50IiBpZD0iZm9vdGVyLXVzZWZ1bC1saW5rcyI+CisgICAgICAgICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlVzZWZ1bCBMaW5rczwvaDI+CisgICAgPHVsIGNsYXNzPSJuYXYiPjxsaT48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy8iPlJlcG9ydCBhIEJ1ZzwvYT48L2xpPjxsaT48YSBocmVmPSIvL2hlbHAuZWNsaXBzZS5vcmcvIj5Eb2N1bWVudGF0aW9uPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvY29udHJpYnV0ZS8iPkhvdyB0byBDb250cmlidXRlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbWFpbC8iPk1haWxpbmcgTGlzdHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9mb3J1bXMvIj5Gb3J1bXM8L2E+PC9saT48bGk+PGEgaHJlZj0iLy9tYXJrZXRwbGFjZS5lY2xpcHNlLm9yZyI+TWFya2V0cGxhY2U8L2E+PC9saT48L3VsPiAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb2wtc20tNiBoaWRkZW4tcHJpbnQiIGlkPSJmb290ZXItb3RoZXIiPgorICAgICAgICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5PdGhlcjwvaDI+CisgICAgPHVsIGNsYXNzPSJuYXYiPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2lkZS8iPklERSBhbmQgVG9vbHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wcm9qZWN0cyI+UHJvamVjdHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvd29ya2luZ2dyb3Vwcy8iPldvcmtpbmcgR3JvdXBzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL3Jlc2VhcmNoLyI+UmVzZWFyY2hARWNsaXBzZTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3NlY3VyaXR5LyI+UmVwb3J0IGEgVnVsbmVyYWJpbGl0eTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3N0YXR1cy5lY2xpcHNlLm9yZyI+U2VydmljZSBTdGF0dXM8L2E+PC9saT48L3VsPiAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS0yNCBtYXJnaW4tdG9wLTIwIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgICA8ZGl2IGlkPSJjb3B5cmlnaHQiIGNsYXNzPSJjb2wtbWQtMTYiPgorICAgICAgICAgICAgPHAgaWQ9ImNvcHlyaWdodC10ZXh0Ij5Db3B5cmlnaHQgJmNvcHk7IEVjbGlwc2UgRm91bmRhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTggc29jaWFsLW1lZGlhIj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC1pbmxpbmUiPgorICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNvY2lhbC1tZWRpYS1saW5rIGZhLXN0YWNrIGZhLWxnIiBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL0VjbGlwc2VGZG4iIGFyaWEtbGFiZWw9IkVjbGlwc2UgRm91bmRhdGlvbiBUd2l0dGVyIHByb2ZpbGUiPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNpcmNsZS10aGluIGZhLXN0YWNrLTJ4Ij48L2k+CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHdpdHRlciBmYS1zdGFjay0xeCI+PC9pPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzb2NpYWwtbWVkaWEtbGluayBmYS1zdGFjayBmYS1sZyIgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2VjbGlwc2Uub3JnIiBhcmlhLWxhYmVsPSJFY2xpcHNlIEZvdW5kYXRpb24gRmFjZWJvb2sgcGFnZSI+CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2lyY2xlLXRoaW4gZmEtc3RhY2stMngiPjwvaT4KKyAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1mYWNlYm9vayBmYS1zdGFjay0xeCI+PC9pPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzb2NpYWwtbWVkaWEtbGluayBmYS1zdGFjayBmYS1sZyIgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vdXNlci9FY2xpcHNlRmRuIiBhcmlhLWxhYmVsPSJFY2xpcHNlIEZvdW5kYXRpb24gWW91VHViZSBjaGFubmVsIj4KKyAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jaXJjbGUtdGhpbiBmYS1zdGFjay0yeCI+PC9pPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXlvdXR1YmUgZmEtc3RhY2stMXgiPjwvaT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic29jaWFsLW1lZGlhLWxpbmsgZmEtc3RhY2sgZmEtbGciIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L2VjbGlwc2UtZm91bmRhdGlvbiIgYXJpYS1sYWJlbD0iRWNsaXBzZSBGb3VuZGF0aW9uIExpbmtlZGluIHByb2ZpbGUiPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNpcmNsZS10aGluIGZhLXN0YWNrLTJ4Ij48L2k+CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbGlua2VkaW4gZmEtc3RhY2stMXgiPjwvaT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PiAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJzY3JvbGx1cCI+QmFjayB0byB0aGUgdG9wPC9hPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZm9vdGVyPgorPCEtLSBQbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQgc28gdGhlIHBhZ2VzIGxvYWQgZmFzdGVyIC0tPgorPHNjcmlwdCBzcmM9Ii9lY2xpcHNlLm9yZy1jb21tb24vdGhlbWVzL3NvbHN0aWNlL3B1YmxpYy9qYXZhc2NyaXB0L21haW4ubWluLmpzP3Zhcj0wLjAuMTcyIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yc2UuY29yZS8ubG9nIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yc2UuY29yZS8ubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnJzZS5jb3JlLy5sb2cKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucnNlLmNvcmUvaW5pdGlhbGl6ZXJNYXJrcy9vcmcuZWNsaXBzZS5yc2UuaW50ZXJuYWwuY29yZS5SU0VMb2NhbENvbm5lY3Rpb25Jbml0aWFsaXplci5tYXJrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5yc2UuY29yZS9pbml0aWFsaXplck1hcmtzL29yZy5lY2xpcHNlLnJzZS5pbnRlcm5hbC5jb3JlLlJTRUxvY2FsQ29ubmVjdGlvbkluaXRpYWxpemVyLm1hcmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucnNlLmNvcmUvaW5pdGlhbGl6ZXJNYXJrcy9vcmcuZWNsaXBzZS5yc2UuaW50ZXJuYWwuY29yZS5SU0VMb2NhbENvbm5lY3Rpb25Jbml0aWFsaXplci5tYXJrCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnNlYXJjaC9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zZWFyY2gvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzM5OTRlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zZWFyY2gvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDIwMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPHNlY3Rpb24gbmFtZT0iU2VhcmNoRGlhbG9nLlNjb3BlUGFydCI+CisJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IiI+CisJCTxpdGVtIHZhbHVlPSIxMDAwIiBrZXk9Im9yZy5lY2xpcHNlLnNlYXJjaC5yZXN1bHRwYWdlLmxpbWl0Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IiI+CisJCTxpdGVtIHZhbHVlPSIxMDAwIiBrZXk9Im9yZy5lY2xpcHNlLnNlYXJjaC5yZXN1bHRwYWdlLmxpbWl0Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IlRleHRTZWFyY2hQYWdlIj4KKwkJPGl0ZW0gdmFsdWU9IjEyIiBrZXk9IkhJU1RPUllfU0laRSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iQ0FTRV9TRU5TSVRJVkUiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IlJFR19FWF9TRUFSQ0giLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IldIT0xFX1dPUkQiLz4KKwkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9IlNFQVJDSF9ERVJJVkVEIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJTRUFSQ0hfSU5fQklOQVJJRVMiLz4KKwkJPHNlY3Rpb24gbmFtZT0iSElTVE9SWTYiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9IlN5c3RlbS5vdXQiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlk3Ij4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJjaGVja1BhdGgiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlk0Ij4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJyZXdyaXRlU3ViUXVlcnkiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkxMCI+CisJCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0idHJhdmVyc2VfYW5kX3Jld3JpdGVfS29yYWxRdWVyeSIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gbmFtZT0iSElTVE9SWTUiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9InJld3JpdGVPYmpOb2RlIiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBuYW1lPSJFWFRFTlNJT05TIj4KKwkJCTxpdGVtIHZhbHVlPSIqLmphdmEiIGtleT0iMCIvPgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkxMSI+CisJCQk8aXRlbSB2YWx1ZT0idHJ1ZSIga2V5PSJpZ25vcmVDYXNlIi8+CisJCQk8aXRlbSB2YWx1ZT0iMCIga2V5PSJzY29wZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzV2hvbGVXb3JkIi8+CisJCQk8aXRlbSB2YWx1ZT0idHJhdmVyc2VKc29uVHJlZSIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gbmFtZT0iSElTVE9SWTgiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9ImluaXRfQ29uc3RhbnRGcm9tUHJvcGVydGllcyIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gbmFtZT0iSElTVE9SWTkiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9Ildmb3JtbSIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gbmFtZT0iSElTVE9SWTIiPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJJTlNFUlQiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkzIj4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJyZWluIGF1cyIga2V5PSJ0ZXh0UGF0dGVybiIvPgorCQkJPGl0ZW0gdmFsdWU9ImZhbHNlIiBrZXk9ImlzUmVnRXhTZWFyY2giLz4KKwkJCTxsaXN0IGtleT0iZmlsZU5hbWVQYXR0ZXJucyI+CisJCQkJPGl0ZW0gdmFsdWU9IiouamF2YSIvPgorCQkJPC9saXN0PgorCQkJPGxpc3Qga2V5PSJ3b3JraW5nU2V0cyI+CisJCQk8L2xpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gbmFtZT0iSElTVE9SWTAiPgorCQkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iaWdub3JlQ2FzZSIvPgorCQkJPGl0ZW0gdmFsdWU9IjAiIGtleT0ic2NvcGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1dob2xlV29yZCIvPgorCQkJPGl0ZW0gdmFsdWU9InNldEF1dG9Db21taXQiIGtleT0idGV4dFBhdHRlcm4iLz4KKwkJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJpc1JlZ0V4U2VhcmNoIi8+CisJCQk8bGlzdCBrZXk9ImZpbGVOYW1lUGF0dGVybnMiPgorCQkJCTxpdGVtIHZhbHVlPSIqLmphdmEiLz4KKwkJCTwvbGlzdD4KKwkJCTxsaXN0IGtleT0id29ya2luZ1NldHMiPgorCQkJPC9saXN0PgorCQk8L3NlY3Rpb24+CisJCTxzZWN0aW9uIG5hbWU9IkhJU1RPUlkxIj4KKwkJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9Imlnbm9yZUNhc2UiLz4KKwkJCTxpdGVtIHZhbHVlPSIwIiBrZXk9InNjb3BlIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNXaG9sZVdvcmQiLz4KKwkJCTxpdGVtIHZhbHVlPSJhdXRvY29tbWl0IiBrZXk9InRleHRQYXR0ZXJuIi8+CisJCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeFNlYXJjaCIvPgorCQkJPGxpc3Qga2V5PSJmaWxlTmFtZVBhdHRlcm5zIj4KKwkJCQk8aXRlbSB2YWx1ZT0iKi5qYXZhIi8+CisJCQk8L2xpc3Q+CisJCQk8bGlzdCBrZXk9IndvcmtpbmdTZXRzIj4KKwkJCTwvbGlzdD4KKwkJPC9zZWN0aW9uPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5zZWFyY2gudGV4dC5GaWxlU2VhcmNoUmVzdWx0UGFnZSI+CisJCTxpdGVtIHZhbHVlPSIxMDAwIiBrZXk9Im9yZy5lY2xpcHNlLnNlYXJjaC5yZXN1bHRwYWdlLmxpbWl0Ii8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IlNlYXJjaCI+CisJCTxsaXN0IGtleT0iU2VhcmNoLnByb2Nlc3NlZFBhZ2VJZHMiPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLnNlYXJjaC5pbnRlcm5hbC51aS50ZXh0LlRleHRTZWFyY2hQYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UubXlseW4udGFza3MudWkuc2VhcmNoLnBhZ2UiLz4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5lZ2l0LnVpLmNvbW1pdFNlYXJjaFBhZ2UiLz4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVNlYXJjaFBhZ2UiLz4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5KYXZhU2VhcmNoUGFnZSIvPgorCQk8L2xpc3Q+CisJCTxsaXN0IGtleT0iU2VhcmNoLmVuYWJsZWRQYWdlSWRzIj4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5zZWFyY2guaW50ZXJuYWwudWkudGV4dC5UZXh0U2VhcmNoUGFnZSIvPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnNlYXJjaC5wYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuZWdpdC51aS5jb21taXRTZWFyY2hQYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFTZWFyY2hQYWdlIi8+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YVNlYXJjaFBhZ2UiLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJTZWFyY2hEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2Uuc2VhcmNoLmludGVybmFsLnVpLnRleHQuVGV4dFNlYXJjaFBhZ2UiIGtleT0iUFJFVklPVVNfUEFHRSIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVNlYXJjaFJlc3VsdFBhZ2UiPgorCQk8aXRlbSB2YWx1ZT0iMTAwMCIga2V5PSJvcmcuZWNsaXBzZS5qZHQuc2VhcmNoLnJlc3VsdHBhZ2UubGltaXQiLz4KKwkJPGl0ZW0gdmFsdWU9IlRSVUUiIGtleT0ib3JnLmVjbGlwc2UuamR0LnNlYXJjaC5yZXN1bHRwYWdlLmxpbWl0X2VuYWJsZWQiLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iRGlhbG9nQm91bmRzX1NlYXJjaERpYWxvZyI+CisJCTxpdGVtIHZhbHVlPSI1MTMiIGtleT0iRElBTE9HX1dJRFRIIi8+CisJCTxpdGVtIHZhbHVlPSIxfFNlZ29lIFVJfDkuMHwwfFdJTkRPV1N8MXwtMTJ8MHwwfDB8NDAwfDB8MHwwfDF8MHwwfDB8MHxTZWdvZSBVSSIga2V5PSJESUFMT0dfRk9OVF9OQU1FIi8+CisJCTxpdGVtIHZhbHVlPSI0NjIiIGtleT0iRElBTE9HX0hFSUdIVCIvPgorCQk8aXRlbSB2YWx1ZT0iNzE1IiBrZXk9IkRJQUxPR19YX09SSUdJTiIvPgorCQk8aXRlbSB2YWx1ZT0iMjIwIiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPgorCTwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudGlwcy5pZGUvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudGlwcy5pZGUvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EwYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS50aXBzLmlkZS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLmlkZS9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pZGUvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ExZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pZGUvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8bGlzdCBrZXk9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLndpemFyZHMuZGF0YXRyYW5zZmVyLlNtYXJ0SW1wb3J0Um9vdFdpemFyZFBhZ2Uua25vd25Tb3VyY2VzIj4KKwkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXFByb2plY3QtVGVzdHMiLz4KKwkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tU2VydmljZXMiLz4KKwkJPGl0ZW0gdmFsdWU9IkY6XERhdGVuXHdzcC1Lb3JBUC1TZXJ2aWNlc1xHbGVtbVNlcnZpY2VzXC5zZXR0aW5ncyIvPgorCTwvbGlzdD4KKwk8c2VjdGlvbiBuYW1lPSJDbGVhbkRpYWxvZ1NldHRpbmdzIj4KKwkJPGl0ZW0gdmFsdWU9IjUwMCIga2V5PSJESUFMT0dfV0lEVEgiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0iQlVJTERfQUxMIi8+CisJCTxpdGVtIHZhbHVlPSJmYWxzZSIga2V5PSJUT0dHTEVfU0VMRUNURUQiLz4KKwkJPGl0ZW0gdmFsdWU9IjQ2NSIga2V5PSJESUFMT0dfSEVJR0hUIi8+CisJCTxpdGVtIHZhbHVlPSI2OTQiIGtleT0iRElBTE9HX1hfT1JJR0lOIi8+CisJCTxpdGVtIHZhbHVlPSIyMTAiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+CisJCTxpdGVtIHZhbHVlPSJ0cnVlIiBrZXk9IkJVSUxEX05PVyIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJFeHRlcm5hbFByb2plY3RJbXBvcnRXaXphcmQiPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iV2l6YXJkUHJvamVjdHNJbXBvcnRQYWdlLlNUT1JFX05FU1RFRF9QUk9KRUNUUyIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iV2l6YXJkUHJvamVjdHNJbXBvcnRQYWdlLlNUT1JFX0NPUFlfUFJPSkVDVF9JRCIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iV2l6YXJkUHJvamVjdHNJbXBvcnRQYWdlLlNUT1JFX0FSQ0hJVkVfU0VMRUNURUQiLz4KKwkJPGxpc3Qga2V5PSJXaXphcmRQcm9qZWN0c0ltcG9ydFBhZ2UuU1RPUkVfRElSRUNUT1JJRVMiPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzXEdsZW1tQ2xpZW50Ii8+CisJCQk8aXRlbSB2YWx1ZT0iQzpcbXlJRFNcRGF0ZW5cS29yQVBcUHJvamVjdC1UZXN0cyIvPgorCQkJPGl0ZW0gdmFsdWU9IkM6XG15SURTXERhdGVuXEtvckFQXEdsZW1tU2VydmljZXMiLz4KKwkJCTxpdGVtIHZhbHVlPSJGOlxEYXRlblx3c3AtS29yQVAtU2VydmljZXNcZ2xlbW0iLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9IldpemFyZFByb2plY3RzSW1wb3J0UGFnZS5TVE9SRV9BUkNISVZFUyI+CisJCQk8aXRlbSB2YWx1ZT0iIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iUmVzb3VyY2VOYXZpZ2F0b3IiPgorCQk8aXRlbSB2YWx1ZT0iQWdncmVnYXRlIGZvciB3aW5kb3cgMTU3MzU1ODAwODM2NyIga2V5PSJSZXNvdXJjZVdvcmtpbmdTZXRGaWx0ZXIuU1RPUkVfV09SS0lOR19TRVQiLz4KKwkJPGl0ZW0gdmFsdWU9IjEiIGtleT0iUmVzb3VyY2VWaWV3ZXIuU1RPUkVfU09SVF9UWVBFIi8+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9IldPUktCRU5DSF9TRVRUSU5HUyI+CisJCTxsaXN0IGtleT0iRU5BQkxFRF9UUkFOU0ZFUlMiPgorCQk8L2xpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5kaWFsb2dzLlByb2plY3RDb250ZW50c0xvY2F0aW9uQXJlYSI+CisJCTxpdGVtIHZhbHVlPSJDOlxteUlEU1xEYXRlblxLb3JBUFxTZXJ2aWNlcy0wLjEiIGtleT0iT1VUU0lERV9MT0NBVElPTiIvPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJOZXdXaXphcmRBY3Rpb24iPgorCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLndpemFyZHMuSmF2YVByb2plY3RXaXphcmQiIGtleT0iTmV3V2l6YXJkU2VsZWN0aW9uUGFnZS5TVE9SRV9TRUxFQ1RFRF9JRCIvPgorCQk8bGlzdCBrZXk9Ik5ld1dpemFyZFNlbGVjdGlvblBhZ2UuU1RPUkVfRVhQQU5ERURfQ0FURUdPUklFU19JRCI+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LnVpLmphdmEiLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJDaG9vc2VXb3Jrc3BhY2VEaWFsb2dTZXR0aW5ncyI+CisJCTxpdGVtIHZhbHVlPSI2NTgiIGtleT0iRElBTE9HX1hfT1JJR0lOIi8+CisJCTxpdGVtIHZhbHVlPSIyNzkiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pbnRyby9kaWFsb2dfc2V0dGluZ3MueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pbnRyby9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMThmMDIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLmludHJvL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4KKwk8aXRlbSB2YWx1ZT0iMTAyNCIga2V5PSJpbnRyb0xhdW5jaEJhci5sb2NhdGlvbiIvPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pbnRyby9pbnRyb3N0YXRlIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS5pbnRyby9pbnRyb3N0YXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNmQ1NmMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLmludHJvL2ludHJvc3RhdGUKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHN0YXRlIHJlb3Blbj0idHJ1ZSIvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjY4NzAyCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvci9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuRmluZFJlcGxhY2VEaWFsb2ciPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaXNSZWdFeCIvPgorCQk8aXRlbSB2YWx1ZT0icmV0dXJuIiBrZXk9InNlbGVjdGlvbiIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iY2FzZXNlbnNpdGl2ZSIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0iaW5jcmVtZW50YWwiLz4KKwkJPGl0ZW0gdmFsdWU9InRydWUiIGtleT0id3JhcCIvPgorCQk8aXRlbSB2YWx1ZT0iZmFsc2UiIGtleT0id2hvbGV3b3JkIi8+CisJCTxsaXN0IGtleT0iZmluZGhpc3RvcnkiPgorCQkJPGl0ZW0gdmFsdWU9InJldHVybiIvPgorCQkJPGl0ZW0gdmFsdWU9Ik1heExlbW1hU2l6ZSIvPgorCQkJPGl0ZW0gdmFsdWU9ImZuYW1lU2NyaXB0Ii8+CisJCQk8aXRlbSB2YWx1ZT0iZG9HbGVtIi8+CisJCQk8aXRlbSB2YWx1ZT0iSU5TRVJUIi8+CisJCQk8aXRlbSB2YWx1ZT0iZGVyYnlEQlVSTCIvPgorCQkJPGl0ZW0gdmFsdWU9ImZuYW1lREIiLz4KKwkJCTxpdGVtIHZhbHVlPSJsaXN0Ii8+CisJCQk8aXRlbSB2YWx1ZT0ibGlsc3QiLz4KKwkJCTxpdGVtIHZhbHVlPSJmb3JtYXREYk5hbWUiLz4KKwkJCTxpdGVtIHZhbHVlPSJyZXNwb25zZUNvbnRlbnRMYXQxIi8+CisJCQk8aXRlbSB2YWx1ZT0ibmV3IFN0cmluZyIvPgorCQkJPGl0ZW0gdmFsdWU9ImNoZWNrUGF0aCIvPgorCQkJPGl0ZW0gdmFsdWU9ImhpZGUiLz4KKwkJCTxpdGVtIHZhbHVlPSJyZXdyaXRlU3ViUXVlcnkiLz4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9InJlcGxhY2VoaXN0b3J5Ij4KKwkJCTxpdGVtIHZhbHVlPSJmb3V0Ii8+CisJCQk8aXRlbSB2YWx1ZT0iV29yZGZvcm1TZXJ2aWNlcy5mIi8+CisJCQk8aXRlbSB2YWx1ZT0iV2Zvcm1TZXJ2aWNlcy5mIi8+CisJCQk8aXRlbSB2YWx1ZT0iR2xlbW1TZXJ2aWNlcy5mIi8+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5GaW5kUmVwbGFjZURpYWxvZ19kaWFsb2dCb3VuZHMiPgorCQk8aXRlbSB2YWx1ZT0iMjg0IiBrZXk9IkRJQUxPR19XSURUSCIvPgorCQk8aXRlbSB2YWx1ZT0iMXxTZWdvZSBVSXw5LjB8MHxXSU5ET1dTfDF8LTEyfDB8MHwwfDQwMHwwfDB8MHwxfDB8MHwwfDB8U2Vnb2UgVUkiIGtleT0iRElBTE9HX0ZPTlRfTkFNRSIvPgorCQk8aXRlbSB2YWx1ZT0iMzkxIiBrZXk9IkRJQUxPR19IRUlHSFQiLz4KKwkJPGl0ZW0gdmFsdWU9IjExMjAiIGtleT0iRElBTE9HX1hfT1JJR0lOIi8+CisJCTxpdGVtIHZhbHVlPSIzMzIiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+CisJPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL2RpYWxvZ19zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0NWY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoUHJlZmVyZW5jZURpYWxvZ1NldHRpbmdzIj4KKwkJPGl0ZW0gdmFsdWU9IjQ5OCIga2V5PSJESUFMT0dfWF9PUklHSU4iLz4KKwkJPGl0ZW0gdmFsdWU9IjEyOSIga2V5PSJESUFMT0dfWV9PUklHSU4iLz4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuUXVpY2tBY2Nlc3MiPgorCQk8aXRlbSB2YWx1ZT0iLTEiIGtleT0iZGlhbG9nSGVpZ2h0Ii8+CisJCTxpdGVtIHZhbHVlPSItMSIga2V5PSJkaWFsb2dXaWR0aCIvPgorCQk8bGlzdCBrZXk9InRleHRFbnRyaWVzIj4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9Im9yZGVyZWRFbGVtZW50cyI+CisJCTwvbGlzdD4KKwkJPGxpc3Qga2V5PSJvcmRlcmVkUHJvdmlkZXJzIj4KKwkJPC9saXN0PgorCQk8bGlzdCBrZXk9InRleHRBcnJheSI+CisJCTwvbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gbmFtZT0iTmV3V2l6YXJkQWN0aW9uIj4KKwkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2bGV0LnVpLnByb2plY3QuZmFjZXQuV2ViUHJvamVjdFdpemFyZCIga2V5PSJOZXdXaXphcmRTZWxlY3Rpb25QYWdlLlNUT1JFX1NFTEVDVEVEX0lEIi8+CisJCTxsaXN0IGtleT0iTmV3V2l6YXJkU2VsZWN0aW9uUGFnZS5TVE9SRV9FWFBBTkRFRF9DQVRFR09SSUVTX0lEIj4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQudWkuamF2YSIvPgorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53ZWIudWkiLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJJbXBvcnRFeHBvcnRBY3Rpb24iPgorCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UubTJlLmNvcmUud2l6YXJkcy5NYXZlbjJJbXBvcnRXaXphcmQiIGtleT0iSW1wb3J0RXhwb3J0UGFnZS5TVE9SRV9TRUxFQ1RFRF9JTVBPUlRfV0laQVJEX0lEIi8+CisJCTxsaXN0IGtleT0iSW1wb3J0RXhwb3J0UGFnZS5TVE9SRV9FWFBBTkRFRF9JTVBPUlRfQ0FURUdPUklFUyI+CisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2UudWkuQmFzaWMiLz4KKwkJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5tMmUiLz4KKwkJPC9saXN0PgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBuYW1lPSJGaWxlU3lzdGVtSW1wb3J0V2l6YXJkIj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC93b3JraW5nc2V0cy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC93b3JraW5nc2V0cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlMmE5OQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL3dvcmtpbmdzZXRzLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d29ya2luZ1NldE1hbmFnZXI+Cis8d29ya2luZ1NldCBlZGl0UGFnZUlkPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkuRHluYW1pY1NvdXJjZXNXb3JraW5nU2V0IiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtpbmdTZXRGYWN0b3J5IiBpZD0iMTU3MzU1Nzk5NzI4NV8wIiBsYWJlbD0iSmF2YSBNYWluIFNvdXJjZXMiIG5hbWU9Im1haW4iPgorPGl0ZW0gZWxlbWVudElEPSI9R0xFTU0tU2VydmljZXMvc3JjIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgorPGl0ZW0gZWxlbWVudElEPSI9R3Vlc3Qvc3JjIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgorPC93b3JraW5nU2V0PgorPHdvcmtpbmdTZXQgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLkR5bmFtaWNTb3VyY2VzV29ya2luZ1NldCIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JraW5nU2V0RmFjdG9yeSIgaWQ9IjE1NzM1NTc5OTczMDFfMSIgbGFiZWw9IkphdmEgVGVzdCBTb3VyY2VzIiBuYW1lPSJ0ZXN0Ii8+Cis8d29ya2luZ1NldCBhZ2dyZWdhdGU9InRydWUiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2luZ1NldEZhY3RvcnkiIGlkPSIxNTczNTU4MDA4MzY3XzIiIGxhYmVsPSJXaW5kb3cgV29ya2luZyBTZXQiIG5hbWU9IkFnZ3JlZ2F0ZSBmb3Igd2luZG93IDE1NzM1NTgwMDgzNjciLz4KKzwvd29ya2luZ1NldE1hbmFnZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUvZGVwZW5kZW5jeUNhY2hlLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUvZGVwZW5kZW5jeUNhY2hlLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNGUyNGEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS9kZXBlbmRlbmN5Q2FjaGUuaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS9wcmVmcy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlL3ByZWZzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTZiOTFhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS9wcmVmcy54bWwKQEAgLTAsMCArMSw5IEBACis8cm9vdD4KKyAgPGZhY2V0IGlkPSJqc3QuamF4cnMiPgorICAgIDxub2RlIG5hbWU9ImxpYnByb3YiPgorICAgICAgPG5vZGUgbmFtZT0ibGFzdC1wcm92aWRlci11c2VkIj4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSIyLjEiIHZhbHVlPSJqYXhycy1uby1vcC1saWJyYXJ5LXByb3ZpZGVyIi8+CisgICAgICA8L25vZGU+CisgICAgPC9ub2RlPgorICA8L2ZhY2V0PgorPC9yb290PgpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQuY2FjaGUvY2FjaGUueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQuY2FjaGUvY2FjaGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NzQwMzMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5jYWNoZS9jYWNoZS54bWwKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PGNhY2hlLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvZXh0ZXJuYWxMaWJzVGltZVN0YW1wcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9leHRlcm5hbExpYnNUaW1lU3RhbXBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhODg1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvZXh0ZXJuYWxMaWJzVGltZVN0YW1wcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy8xNDQ2MDM3NzA3LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTQ0NjAzNzcwNy5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWY0MWJkCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTQ0NjAzNzcwNy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy8xNTA1MTUxMjkxLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTUwNTE1MTI5MS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY4YzcxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTUwNTE1MTI5MS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy8xOTgzMDYwNDk4LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTk4MzA2MDQ5OC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjAxNzNhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMTk4MzA2MDQ5OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy8yMjkxMjIyNTIwLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjI5MTIyMjUyMC5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2ZkMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjI5MTIyMjUyMC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy8yNjY0MjgyMjQyLmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjY2NDI4MjI0Mi5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjE0ZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjY2NDI4MjI0Mi5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy8yOTQzODUxOTY1LmluZGV4IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjk0Mzg1MTk2NS5pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjAxNzNhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvMjk0Mzg1MTk2NS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy82MTg0OTA2ODguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy82MTg0OTA2ODguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwZmJmNgotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9pbmRleGVzLzYxODQ5MDY4OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvaW5kZXhlcy9zYXZlZEluZGV4TmFtZXMudHh0IGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvc2F2ZWRJbmRleE5hbWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYwOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2luZGV4ZXMvc2F2ZWRJbmRleE5hbWVzLnR4dApAQCAtMCwwICsxLDggQEAKK0lOREVYIFZFUlNJT04gMS40K0M6XG15SURTXERhdGVuXEtvckFQXFNlcnZpY2VzLTAuMVx3c3AtS29yQVAtU2VydmljZXNcLm1ldGFkYXRhXC5wbHVnaW5zXG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmVcaW5kZXhlcworMjY2NDI4MjI0Mi5pbmRleAorMTUwNTE1MTI5MS5pbmRleAorMjI5MTIyMjUyMC5pbmRleAorNjE4NDkwNjg4LmluZGV4CisxOTgzMDYwNDk4LmluZGV4CisxNDQ2MDM3NzA3LmluZGV4CisyOTQzODUxOTY1LmluZGV4CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL2Jhc2VCcm93c2VyTGlicmFyeS5qcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvYmFzZUJyb3dzZXJMaWJyYXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzk5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL2Jhc2VCcm93c2VyTGlicmFyeS5qcwpAQCAtMCwwICsxLDUzOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTMgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIE9iamVjdCBET01FeGNlcHRpb24oKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBPYmplY3QKKyAqLworZnVuY3Rpb24gRE9NRXhjZXB0aW9uKCl7fTsKK0RPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUj0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUj0xOworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uRE9NU1RSSU5HX1NJWkVfRVJSPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLkRPTVNUUklOR19TSVpFX0VSUj0yOworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSPTMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAgIAorICovCitET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSPTM7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5XUk9OR19ET0NVTUVOVF9FUlI9NAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgIAorICovCitET01FeGNlcHRpb24uV1JPTkdfRE9DVU1FTlRfRVJSPTQ7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5JTlZBTElEX0NIQVJBQ1RFUl9FUlI9NQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLklOVkFMSURfQ0hBUkFDVEVSX0VSUj01OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uTk9fREFUQV9BTExPV0VEX0VSPTYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLk5PX0RBVEFfQUxMT1dFRF9FUj02OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSPTcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLk5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUj03OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUj04CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgIAorICovCitET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUj04OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlI9OQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUj05OworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uSU5VU0VfQVRUUklCVVRFX0VSUj0xMAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgIAorICovCitET01FeGNlcHRpb24uSU5VU0VfQVRUUklCVVRFX0VSUj0xMDsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSPTExCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgCisgKi8KK0RPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUj0xMTsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlI9MTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgICAgIAorICovCitET01FeGNlcHRpb24uU1lOVEFYX0VSUj0xMjsKKy8qKgorICogQ29uc3RhbnQgRE9NRXhjZXB0aW9uLklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSPTEzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSPTEzOworLyoqCisgKiBDb25zdGFudCBET01FeGNlcHRpb24uTkFNRVNQQUNFX0VSUj0xNAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgICAKKyAqLworRE9NRXhjZXB0aW9uLk5BTUVTUEFDRV9FUlI9MTQ7CisvKioKKyAqIENvbnN0YW50IERPTUV4Y2VwdGlvbi5OVkFMSURfQUNDRVNTX0VSUj0xNQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgICAgIAorICovCitET01FeGNlcHRpb24uSU5WQUxJRF9BQ0NFU1NfRVJSPTE1OworLyoqCisgICogUHJvcGVydHkgY29kZQorICAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgICogCisgICogQHR5cGUgTnVtYmVyCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICAqLworRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb2RlPTA7CisKKy8qKgorICogT2JqZWN0IERPTUltcGxlbWVudGF0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAYXVnbWVudHMgT2JqZWN0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlICAgT2JqZWN0ICAgICAKKyAqLworZnVuY3Rpb24gRE9NSW1wbGVtZW50YXRpb24oKXt9OworRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgKiBmdW5jdGlvbiBoYXNGZWF0dXJlKGZlYXR1cmUsIHZlcnNpb24pCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gZmVhdHVyZQorICogQHBhcmFtIHtTdHJpbmd9IHZlcnNpb24KKyAqIEByZXR1cm5zIHtCb29sZWFufQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8gCitET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuaGFzRmVhdHVyZSA9IGZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pe3JldHVybiBmYWxzZTt9OworLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudFR5cGUocXVhbGlmaWVkTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IHF1YWxpZmllZE5hbWUKKyAqIEBwYXJhbSB7U3RyaW5nfSBwdWJsaWNJZAorICogQHBhcmFtIHtTdHJpbmd9IHN5c3RlbUlkCisgKiBAcmV0dXJucyB7RG9jdW1lbnRUeXBlfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIERvY3VtZW50VHlwZQorICovIAorRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50VHlwZSA9IGZ1bmN0aW9uKHF1YWxpZmllZE5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCl7cmV0dXJuIG5ldyBEb2N1bWVudFR5cGUoKTt9OworLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudChuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIGRvY3R5cGUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gcXVhbGlmaWVkTmFtZQorICogQHBhcmFtIHtEb2N1bWVudFR5cGV9IGRvY3R5cGUKKyAqIEByZXR1cm5zIHtEb2N1bWVudH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBEb2N1bWVudAorICovIAorRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBkb2N0eXBlKXtyZXR1cm4gbmV3IEhUTUxEb2N1bWVudCgpO307IAorCisvKioKKyAqIE9iamVjdCBEb2N1bWVudEZyYWdtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlICAgTm9kZSAgICAKKyAqLworZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudCgpe307CitEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZT1uZXcgTm9kZSgpOyAKKworLyoqCisgKiBPYmplY3QgRG9jdW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE5vZGUKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgCisgKi8gCitmdW5jdGlvbiBEb2N1bWVudCgpe307CitEb2N1bWVudC5wcm90b3R5cGUgPSBuZXcgTm9kZSgpOworLyoqCisgKiBQcm9wZXJ0eSBkZWZhdWx0VmlldworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgIFdpbmRvdworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgV2luZG93ICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5kZWZhdWx0VmlldyA9IG5ldyBXaW5kb3coKTsgCisvKioKKyAqIFByb3BlcnR5IGRvY3R5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICBEb2N1bWVudFR5cGUKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIERvY3VtZW50VHlwZSAgIAorICovIAorRG9jdW1lbnQucHJvdG90eXBlLmRvY3R5cGUgPSBuZXcgRG9jdW1lbnRUeXBlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAKKyAqIEB0eXBlICAgRE9NSW1wbGVtZW50YXRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIERPTUltcGxlbWVudGF0aW9uCisgKi8gCitEb2N1bWVudC5wcm90b3R5cGUuaW1wbGVtZW50YXRpb24gPSBuZXcgRE9NSW1wbGVtZW50YXRpb24oKTsKKy8qKgorICogUHJvcGVydHkgZG9jdW1lbnRFbGVtZW50IAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEB0eXBlICAgRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKiBAc2VlIEVsZW1lbnQKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5kb2N1bWVudEVsZW1lbnQ9IG5ldyBIVE1MRWxlbWVudCgpOyAKKy8qKgorICogUHJvcGVydHkgc3R5bGVTaGVldHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSAgIEFycmF5CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5zdHlsZVNoZWV0cz0gbmV3IEFycmF5KCk7IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUpICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSB0YWdOYW1lCisgKiBAcmV0dXJucyB7RWxlbWVudH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICogQHNlZSBFbGVtZW50ICAKKyAqLyAgCitEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0YWdOYW1lKXtyZXR1cm4gbmV3IEhUTUxFbGVtZW50KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKiBAc2VlIERvY3VtZW50RnJhZ21lbnQgCisgKi8gCitEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiBuZXcgRG9jdW1lbnRGcmFnbWVudCgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZShkYXRhKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gZGF0YQorICogQHJldHVybnMge1RleHR9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICogQHNlZSBUZXh0IAorICovIAorRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZVRleHROb2RlPWZ1bmN0aW9uKGRhdGEpe3JldHVybiBuZXcgVGV4dCgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVDb21tZW50KGRhdGEpICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhCisgKiBAcmV0dXJucyB7Q29tbWVudH0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqIEBzZWUgQ29tbWVudCAgIAorICovIAorRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24oZGF0YSl7cmV0dXJuIG5ldyBDb21tZW50KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZUNEQVRBU2VjdGlvbihkYXRhKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGRhdGEKKyAqIEByZXR1cm5zIHtDREFUQVNlY3Rpb259CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIENEQVRBU2VjdGlvbiAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVDREFUQVNlY3Rpb249ZnVuY3Rpb24oZGF0YSl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIGRhdGEpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uCisgKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0CisgKiBAcGFyYW0ge1N0cmluZ30gZGF0YQorICogQHJldHVybnMge1Byb2Nlc3NpbmdJbnN0cnVjdGlvbn0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uICAgICAgCisqLworRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbj1mdW5jdGlvbih0YXJnZXQsIGRhdGEpe3JldHVybiBuZXcgUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZShuYW1lKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge0F0dHJ9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIEF0dHIgICAKKyAqLworRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUF0dHJpYnV0ZT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmV3IEF0dHIoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlRW50aXR5UmVmZXJlbmNlKG5hbWUpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge0VudGl0eVJlZmVyZW5jZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRW50aXR5UmVmZXJlbmNlICAgICAKKyAqLworRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVudGl0eVJlZmVyZW5jZT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmV3IEVudGl0eVJlZmVyZW5jZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZSh0YWduYW1lKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gdGFnbmFtZQorICogQHJldHVybnMge05vZGVMaXN0fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGVMaXN0ICAgICAKKyAqLworRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKHRhZ25hbWUpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gaW1wb3J0Tm9kZShpbXBvcnRlZE5vZGUsIGRlZXApCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogIAorICogQHBhcmFtIHtOb2RlfSBpbXBvcnRlZE5vZGUKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gZGVlcAorICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgICAgIAorICovCitEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZT1mdW5jdGlvbihpbXBvcnRlZE5vZGUsIGRlZXApe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VVUkkKKyAqIEBwYXJhbSB7U3RyaW5nfSBxdWFsaWZpZWROYW1lCisgKiBAcmV0dXJucyB7RWxlbWVudH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRWxlbWVudCAgICAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKXtyZXR1cm4gbmV3IEhUTUxFbGVtZW50KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KFN0cmluZyBldmVudFR5cGUpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZQorICogQHJldHVybnMge09iamVjdH0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRWxlbWVudCAgICAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFdmVudD1mdW5jdGlvbihldmVudFR5cGUpe3JldHVybiBuZXcgT2JqZWN0KCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VVUkkKKyAqIEBwYXJhbSB7U3RyaW5nfSBxdWFsaWZpZWROYW1lCisgKiBAcmV0dXJucyB7QXR0cn0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgIEF0dHIgICAgICAgCisgKi8KK0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVBdHRyaWJ1dGVOUz1mdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpe3JldHVybiBuZXcgQXR0cigpO307IAorLyoqCisgKiBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge05vZGVMaXN0fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlICBOb2RlTGlzdCAgICAgICAKKyAqLworRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRJZAorICogQHJldHVybnMge0VsZW1lbnR9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRWxlbWVudCAgICAgICAgIAorICovIAorRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGVsZW1lbnRJZCl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307CisKKy8qKgorICogT2JqZWN0IE5vZGUoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAbWVtYmVyT2YgTm9kZQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRXZlbnRUYXJnZXQgICAgCisgKi8KK2Z1bmN0aW9uIE5vZGUoKXt9OworTm9kZS5wcm90b3R5cGU9bmV3IEV2ZW50VGFyZ2V0KCk7IAorLyoqCisgKiBDb25zdGFudCBOb2RlLkVMRU1FTlRfTk9ERT0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuRUxFTUVOVF9OT0RFPTE7IAorLyoqCisgKiBDb25zdGFudCBOb2RlLkFUVFJJQlVURV9OT0RFPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5BVFRSSUJVVEVfTk9ERT0yOworLyoqCisgKiBDb25zdGFudCBOb2RlLlRFWFRfTk9ERT0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuVEVYVF9OT0RFPTM7CisvKioKKyAqIENvbnN0YW50IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFPTQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5DREFUQV9TRUNUSU9OX05PREU9NDsgCisvKioKKyAqIENvbnN0YW50IE5vZGUuRU5USVRZX1JFRkVSRU5DRV9OT0RFPTUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5FTlRJVFlfUkVGRVJFTkNFX05PREU9NTsgCisvKioKKyAqIENvbnN0YW50IE5vZGUuRU5USVRZX05PREU9NgorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgTm9kZQorICogQHNlZSBOb2RlIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisKKyAqIEBzZWUgICAgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgICAgIAorKi8KK05vZGUuRU5USVRZX05PREU9NjsKKy8qKgorICogQ29uc3RhbnQgTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU9NworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERT03OyAKKy8qKgorICogQ29uc3RhbnQgTm9kZS5DT01NRU5UX05PREU9OAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitOb2RlLkNPTU1FTlRfTk9ERT04OworLyoqCisgKiBDb25zdGFudCBOb2RlLkRPQ1VNRU5UX05PREU9OQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitOb2RlLkRPQ1VNRU5UX05PREU9OTsKKy8qKgorICogQ29uc3RhbnQgTm9kZS5ET0NVTUVOVF9UWVBFX05PREU9MTAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5ET0NVTUVOVF9UWVBFX05PREU9MTA7IAorLyoqCisgKiBDb25zdGFudCBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU9MTEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFPTExOyAKKy8qKgorICogQ29uc3RhbnQgTm9kZS5OT1RBVElPTl9OT0RFPTEyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8KK05vZGUuTk9UQVRJT05fTk9ERT0xMjsKKy8qKgorICogUHJvcGVydHkgbm9kZU5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLyAKK05vZGUucHJvdG90eXBlLm5vZGVOYW1lID0gIiI7IAorLyoqCisgKiBQcm9wZXJ0eSBub2RlVmFsdWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK05vZGUucHJvdG90eXBlLm5vZGVWYWx1ZSA9ICIiOyAKKy8qKgorICogUHJvcGVydHkgbm9kZVR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovICAKK05vZGUucHJvdG90eXBlLm5vZGVUeXBlID0gMDsgCisvKioKKyAqIFByb3BlcnR5IHBhcmVudE5vZGUgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOb2RlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5wYXJlbnROb2RlPW5ldyBOb2RlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBjaGlsZE5vZGVzIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogIAorICogQHR5cGUgTm9kZUxpc3QKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlTGlzdCAgICAKKyovIAorTm9kZS5wcm90b3R5cGUuY2hpbGROb2Rlcz1uZXcgTm9kZUxpc3QoKTsgCisvKioKKyAqIFByb3BlcnR5IGZpcnN0Q2hpbGQgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOb2RlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5maXJzdENoaWxkPW5ldyBOb2RlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBsYXN0Q2hpbGQgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOb2RlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5sYXN0Q2hpbGQ9bmV3IE5vZGUoKTsgIAorLyoqCisgKiBQcm9wZXJ0eSBwcmV2aW91c1NpYmxpbmcgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOb2RlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5wcmV2aW91c1NpYmxpbmc9bmV3IE5vZGUoKTsgCisvKioKKyAqIFByb3BlcnR5IG5leHRTaWJsaW5nICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIE5vZGUKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgIAorICovICAKK05vZGUucHJvdG90eXBlLm5leHRTaWJsaW5nPW5ldyBOb2RlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBhdHRyaWJ1dGVzICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlIE5hbWVkTm9kZU1hcAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKiBAc2VlIE5hbWVkTm9kZU1hcAorICovIAorTm9kZS5wcm90b3R5cGUuYXR0cmlidXRlcz1uZXcgTmFtZWROb2RlTWFwKCk7CisvKioKKyAqIFByb3BlcnR5IG93bmVyRG9jdW1lbnQgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAKKyAqIEB0eXBlIERvY3VtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgRG9jdW1lbnQgICAgCisgKi8gCitOb2RlLnByb3RvdHlwZS5vd25lckRvY3VtZW50ID0gbmV3IEhUTUxEb2N1bWVudCgpOyAKKy8qKgorICogUHJvcGVydHkgbmFtZXNwYWNlVVJJIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovIAorTm9kZS5wcm90b3R5cGUubmFtZXNwYWNlVVJJPSIiOyAKKy8qKgorICogUHJvcGVydHkgcHJlZml4IAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAdHlwZSBTdHJpbmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovIAorTm9kZS5wcm90b3R5cGUucHJlZml4ID0gIiI7IAorLyoqCisgKiBQcm9wZXJ0eSBsb2NhbE5hbWUgICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovIAorTm9kZS5wcm90b3R5cGUubG9jYWxOYW1lPSAiIjsKKy8qKgorICogZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZDaGlsZCkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogICAKKyAqIEBwYXJhbSB7Tm9kZX0gbmV3Q2hpbGQKKyAqIEBwYXJhbSB7Tm9kZX0gcmVmQ2hpbGQKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAKKyAqLyAgCitOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbihuZXdDaGlsZCwgcmVmQ2hpbGQpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiByZXBsYWNlQ2hpbGQobmV3Q2hpbGQsIG9sZENoaWxkKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHBhcmFtIHtOb2RlfSBuZXdDaGlsZAorICogQHBhcmFtIHtOb2RlfSBvbGRDaGlsZAorICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgIAorICovIAorTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkID0gZnVuY3Rpb24obmV3Q2hpbGQsIG9sZENoaWxkKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gcmVtb3ZlQ2hpbGQob2xkQ2hpbGQpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAcGFyYW0ge05vZGV9IG9sZENoaWxkCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgCisgKi8gCitOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKG9sZENoaWxkKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gYXBwZW5kQ2hpbGQobmV3Q2hpbGQpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAcGFyYW0ge05vZGV9IG5ld0NoaWxkCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgCisgKi8gIAorTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihuZXdDaGlsZCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGhhc0NoaWxkTm9kZXMoKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEByZXR1cm5zIHtCb29sZWFufQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLyAKK05vZGUucHJvdG90eXBlLmhhc0NoaWxkTm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGNsb25lTm9kZShkZWVwKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHBhcmFtIHtCb29sZWFufSBkZWVwCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAKKyAqLyAKK05vZGUucHJvdG90eXBlLmNsb25lTm9kZT1mdW5jdGlvbihkZWVwKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gbm9ybWFsaXplKCkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogICAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovIAorTm9kZS5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24oKXt9OyAKKy8qKgorICogZnVuY3Rpb24gaXNTdXBwb3J0ZWQoZmVhdHVyZSwgdmVyc2lvbikgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqICAgCisgKiBAcGFyYW0ge1N0cmluZ30gZmVhdHVyZQorICogQHBhcmFtIHtTdHJpbmd9IHZlcnNpb24KKyAqIEByZXR1cm5zIHtCb29sZWFufQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovIAorTm9kZS5wcm90b3R5cGUuaXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oZmVhdHVyZSwgdmVyc2lvbil7cmV0dXJuIGZhbHNlO307IAorLyoqCisgKiBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVzKCkgICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAgIAorICogQHJldHVybnMge0Jvb2xlYW59CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8gCitOb2RlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlO307CisKKy8qKgorICogT2JqZWN0IE5vZGVMaXN0KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBPYmplY3QKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgT2JqZWN0CisgKi8KK2Z1bmN0aW9uIE5vZGVMaXN0KCl7fTsKK05vZGVMaXN0LnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKy8qKgorICogUHJvcGVydHkgbGVuZ3RoICAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovIAorTm9kZUxpc3QucHJvdG90eXBlLmxlbmd0aD0wOyAKKy8qKgorICogZnVuY3Rpb24gaXRlbShpbmRleCkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAgICBOb3RlOiBUaGlzIG9iamVjdCBjYW4gYWxzbyBiZSBkZXJlZmVyZW5jZWQgdXNpbmcgc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gKGUuZy4gb2JqWzFdKS4gRGVyZWZlcmVuY2luZyB3aXRoIGFuIGludGVnZXIgaW5kZXggaXMgZXF1aXZhbGVudCB0byBpbnZva2luZyB0aGUgaXRlbSBtZXRob2Qgd2l0aCB0aGF0IGluZGV4IAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgIAorKi8gCitOb2RlTGlzdC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKworLyoqCisgKiBPYmplY3QgTmFtZWROb2RlTWFwKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBPYmplY3QKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgT2JqZWN0CisgKi8KK2Z1bmN0aW9uIE5hbWVkTm9kZU1hcCgpe307CitOYW1lZE5vZGVNYXAucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgKiBQcm9wZXJ0eSBsZW5ndGggCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSAgIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyAqLworTmFtZWROb2RlTWFwLnByb3RvdHlwZS5sZW5ndGg9MDsgCisvKioKKyAqIGZ1bmN0aW9uIGdldE5hbWVkSXRlbShuYW1lKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgIAorICovICAKK05hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiBzZXROYW1lZEl0ZW0oYXJnKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7Tm9kZX0gYXJnCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAKK05hbWVkTm9kZU1hcC5wcm90b3R5cGUuc2V0TmFtZWRJdGVtPWZ1bmN0aW9uKGFyZyl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHJlbW92ZU5hbWVkSXRlbShuYW1lKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gCitOYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmV3IE5vZGUoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gaXRlbShpbmRleCkKKyAqIE5vdGU6IFRoaXMgb2JqZWN0IGNhbiBhbHNvIGJlIGRlcmVmZXJlbmNlZCB1c2luZyBzcXVhcmUgYnJhY2tldCBub3RhdGlvbiAoZS5nLiBvYmpbMV0pLiBEZXJlZmVyZW5jaW5nIHdpdGggYW4gaW50ZWdlciBpbmRleCBpcyBlcXVpdmFsZW50IHRvIGludm9raW5nIHRoZSBpdGVtIG1ldGhvZCB3aXRoIHRoYXQgaW5kZXguCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gCitOYW1lZE5vZGVNYXAucHJvdG90eXBlLml0ZW09ZnVuY3Rpb24oaW5kZXgpe3JldHVybiBuZXcgTm9kZSgpO307IAorLyoqCisgKiBmdW5jdGlvbiBnZXROYW1lZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxOYW1lCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlICAgIAorICovIAorTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1OUz1mdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHNldE5hbWVkSXRlbU5TKGFyZykgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge05vZGV9IGFyZworICogQHJldHVybnMge05vZGV9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUgICAgCisgKi8gCitOYW1lZE5vZGVNYXAucHJvdG90eXBlLnNldE5hbWVkSXRlbU5TPWZ1bmN0aW9uKGFyZyl7cmV0dXJuIG5ldyBOb2RlKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIHJlbW92ZU5hbWVkSXRlbU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxOYW1lCisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZSAgICAKKyAqLyAKK05hbWVkTm9kZU1hcC5wcm90b3R5cGUucmVtb3ZlTmFtZWRJdGVtTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpe3JldHVybiBuZXcgTm9kZSgpO307IAorCisvKioKKyAqIE9iamVjdCBDaGFyYWN0ZXJEYXRhKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLyAKK2Z1bmN0aW9uIENoYXJhY3RlckRhdGEoKXt9OworQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGU9bmV3IE5vZGUoKTsKKy8qKgorICogUHJvcGVydHkgZGF0YQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgICBTdHJpbmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuZGF0YT0iIjsgCisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgICBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5sZW5ndGg9MDsgCisvKioKKyAqIGZ1bmN0aW9uIHN1YnN0cmluZ0RhdGEob2Zmc2V0LCBjb3VudCkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogIAorICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldAorICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50CisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0NoYXJhY3RlckRhdGEucHJvdG90eXBlLnN1YnN0cmluZ0RhdGE9ZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCl7cmV0dXJuICIiO307IAorLyoqCisgKiBmdW5jdGlvbiBhcHBlbmREYXRhKGFyZykgICAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gYXJnCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovICAKK0NoYXJhY3RlckRhdGEucHJvdG90eXBlLmFwcGVuZERhdGE9ZnVuY3Rpb24oYXJnKXt9OyAKKy8qKgorICogZnVuY3Rpb24gaW5zZXJ0RGF0YShvZmZzZXQsIGFyZykgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgIAorICogIAorICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldAorICogQHBhcmFtIHtTdHJpbmd9IGFyZworICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0NoYXJhY3RlckRhdGEucHJvdG90eXBlLmluc2VydERhdGE9ZnVuY3Rpb24ob2Zmc2V0LCBhcmcpe307ICAKKy8qKgorICogZnVuY3Rpb24gZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KSAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAgCisgKiAgCisgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0CisgKiBAcGFyYW0ge051bWJlcn0gY291bnQKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5kZWxldGVEYXRhPWZ1bmN0aW9uKG9mZnNldCwgY291bnQpe307IAorLyoqCisgKiBmdW5jdGlvbiByZXBsYWNlRGF0YShvZmZzZXQsIGNvdW50LCBhcmcpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAgCisgKiAgCisgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0CisgKiBAcGFyYW0ge051bWJlcn0gY291bnQKKyAqIEBwYXJhbSB7U3RyaW5nfSBhcmcKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8gCitDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5yZXBsYWNlRGF0YT1mdW5jdGlvbihvZmZzZXQsIGNvdW50LCBhcmcpe307IAorCisvKioKKyAqIE9iamVjdCBBdHRyKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLworZnVuY3Rpb24gQXR0cigpe307CitBdHRyLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEB0eXBlICAgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0F0dHIucHJvdG90eXBlLm5hbWUgPSAiIjsgCisvKioKKyAqIFByb3BlcnR5IHNwZWNpZmllZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgICBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0F0dHIucHJvdG90eXBlLnNwZWNpZmllZCA9IGZhbHNlOyAKKy8qKgorICogUHJvcGVydHkgdmFsdWUgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSAgIFN0cmluZworICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovIAorQXR0ci5wcm90b3R5cGUudmFsdWUgPSAiIjsKKy8qKgorICogUHJvcGVydHkgb3duZXJFbGVtZW50IAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgICBFbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBFbGVtZW50ICAKKyAqLyAKK0F0dHIucHJvdG90eXBlLm93bmVyRWxlbWVudCA9IG5ldyBFbGVtZW50KCk7CisKKy8qKgorICogT2JqZWN0IEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE5vZGUKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZQorICovCitmdW5jdGlvbiBFbGVtZW50KCl7fTsKK0VsZW1lbnQucHJvdG90eXBlPW5ldyBOb2RlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSB0YWdOYW1lICAKKyAqIEB0eXBlICAgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLnRhZ05hbWU9IiI7CisvKioKKyAqIGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoU3Rpcm5nIHR5cGUsIEZ1bmN0aW9uIGxpc3RlbmVyLCBCb29sZWFuIHVzZUNhcHR1cmUpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lcgorICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpe307IAorLyoqCisgKiBmdW5jdGlvbiBhdHRhY2hFdmVudChTdHJpbmcgdHlwZSwgRnVuY3Rpb24gbGlzdGVuZXIpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hFdmVudD1mdW5jdGlvbih0eXBlLCBsaXN0ZW5lcil7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGRldGFjaEV2ZW50KFN0cmluZyB0eXBlLCBGdW5jdGlvbiBsaXN0ZW5lcikgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IHR5cGUKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmRldGFjaEV2ZW50PWZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKXt9OyAKKy8qKgorICogZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChPYmplY3QgZXZlbnQpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEBwYXJhbSB7T2JqZWN0fSBldmVudAorICogQHJldHVybnMge0Jvb2xlYW59CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZXZlbnQpe3JldHVybiBmYWxzZTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge1N0cmluZ30KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlPWZ1bmN0aW9uKG5hbWUpe3JldHVybiAiIjt9OyAKKy8qKgorICogZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKG5hbWUsIHZhbHVlKXt9OyAKKy8qKgorICogZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKG5hbWUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24obmFtZSl7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZU5vZGUobmFtZSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtBdHRyfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOb2RlPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBuZXcgQXR0cigpO307IAorLyoqCisgKiBmdW5jdGlvbiBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7QXR0cn0gbmV3QXR0cgorICogQHJldHVybnMge0F0dHJ9CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOb2RlPWZ1bmN0aW9uKG5ld0F0dHIpe3JldHVybiBuZXcgQXR0cigpO307IAorLyoqCisgKiBmdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVOb2RlKG9sZEF0dHIpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge0F0dHJ9IG9sZEF0dHIKKyAqIEByZXR1cm5zIHtBdHRyfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0VsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5vZGU9ZnVuY3Rpb24ob2xkQXR0cil7cmV0dXJuIG5ldyBBdHRyKCk7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAcmV0dXJucyB7Tm9kZUxpc3R9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxOYW1lCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpe3JldHVybiAiIjt9OyAKKy8qKgorICogZnVuY3Rpb24gc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gcXVhbGlmaWVkTmFtZQorICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitFbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHZhbHVlKXt9OyAKKy8qKgorICogZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0VsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXt9OyAKKy8qKgorICogZnVuY3Rpb24gZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSAgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxOYW1lCisgKiBAcmV0dXJucyB7QXR0cn0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTm9kZU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtyZXR1cm4gbmV3IEF0dHIoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gc2V0QXR0cmlidXRlTm9kZU5TKG5ld0F0dHIpICAgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge0F0dHJ9IG5ld0F0dHIKKyAqIEByZXR1cm5zIHtBdHRyfQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZU5TPWZ1bmN0aW9uKG5ld0F0dHIpe3JldHVybiBuZXcgQXR0cigpO307IAorLyoqCisgKiBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSAgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAgCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlVVJJCisgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxOYW1lCisgKiBAcmV0dXJucyB7Tm9kZUxpc3R9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlM9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OyAKKy8qKgorICogZnVuY3Rpb24gaGFzQXR0cmlidXRlKG5hbWUpICAgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqICAKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0VsZW1lbnQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbihuYW1lKXtyZXR1cm4gZmFsc2U7fTsgCisvKioKKyAqIGZ1bmN0aW9uIGhhc0F0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSAgICAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVVSSQorICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsTmFtZQorICogQHJldHVybnMge0Jvb2xlYW59CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0VsZW1lbnQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtyZXR1cm4gZmFsc2U7fTsgCisKKy8qKgorICogT2JqZWN0IFRleHQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIENoYXJhY3RlckRhdGEKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgQ2hhcmFjdGVyRGF0YQorICovCitmdW5jdGlvbiBUZXh0KCl7fTsKK1RleHQucHJvdG90eXBlID0gbmV3IENoYXJhY3RlckRhdGEoKTsKKy8qKgorICogZnVuY3Rpb24gc3BsaXRUZXh0KG9mZnNldCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQKKyAqIEByZXR1cm5zIHtUZXh0fQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIFRleHQKKyAqLworVGV4dC5wcm90b3R5cGUuc3BsaXRUZXh0ID0gZnVuY3Rpb24ob2Zmc2V0KSB7cmV0dXJuIG5ldyBUZXh0KCk7fTsKKworLyoqCisgKiBPYmplY3QgQ29tbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgQ2hhcmFjdGVyRGF0YQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBDaGFyYWN0ZXJEYXRhCisgKi8KK2Z1bmN0aW9uIENvbW1lbnQoKXt9OworQ29tbWVudC5wcm90b3R5cGUgPSBuZXcgQ2hhcmFjdGVyRGF0YSgpOworCisvKioKKyAqIE9iamVjdCBDREFUQVNlY3Rpb24oKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIFRleHQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgVGV4dAorICovCitmdW5jdGlvbiBDREFUQVNlY3Rpb24oKXt9OworQ0RBVEFTZWN0aW9uLnByb3RvdHlwZSA9IG5ldyBUZXh0KCk7CisKKy8qKgorICogT2JqZWN0IERvY3VtZW50VHlwZSgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgTm9kZQorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICogQHNlZSBOb2RlCisgKi8KK2Z1bmN0aW9uIERvY3VtZW50VHlwZSgpe307CitEb2N1bWVudFR5cGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitEb2N1bWVudFR5cGUucHJvdG90eXBlLm5hbWU9IiI7IAorLyoqCisgKiBQcm9wZXJ0eSBlbnRpdGllcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgTmFtZWROb2RlTWFwIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitEb2N1bWVudFR5cGUucHJvdG90eXBlLmVudGl0aWVzID0gbmV3IE5hbWVkTm9kZU1hcCgpOworLyoqCisgKiBQcm9wZXJ0eSBub3RhdGlvbnMgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBOYW1lZE5vZGVNYXAgCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0RvY3VtZW50VHlwZS5wcm90b3R5cGUubm90YXRpb25zPW5ldyBOYW1lZE5vZGVNYXAoKTsgCisvKioKKyAqIFByb3BlcnR5IHB1YmxpY0lkIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitEb2N1bWVudFR5cGUucHJvdG90eXBlLnB1YmxpY0lkPSIiOyAKKy8qKgorICogUHJvcGVydHkgc3lzdGVtSWQgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitEb2N1bWVudFR5cGUucHJvdG90eXBlLnN5c3RlbUlkPSIiOyAKKy8qKgorICogUHJvcGVydHkgaW50ZXJuYWxTdWJzZXQgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcgCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK0RvY3VtZW50VHlwZS5wcm90b3R5cGUuaW50ZXJuYWxTdWJzZXQ9IiI7CisKKy8qKgorICogT2JqZWN0IE5vdGF0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLworZnVuY3Rpb24gTm90YXRpb24oKXt9OworTm90YXRpb24ucHJvdG90eXBlPW5ldyBOb2RlKCk7IAorLyoqCisgKiBQcm9wZXJ0eSBwdWJsaWNJZCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gIAorTm90YXRpb24ucHJvdG90eXBlLnB1YmxpY0lkPSIiOyAKKy8qKgorICogUHJvcGVydHkgc3lzdGVtSWQgCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbCAKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgIAorICovIAorTm90YXRpb24ucHJvdG90eXBlLnN5c3RlbUlkPSIiOworCisvKioKKyAqIE9iamVjdCBFbnRpdHkoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE5vZGUKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZQorICovIAorZnVuY3Rpb24gRW50aXR5KCl7fTsgCitFbnRpdHkucHJvdG90eXBlPW5ldyBOb2RlKCk7CisvKioKKyAqIFByb3BlcnR5IHB1YmxpY0lkIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLyAgCitFbnRpdHkucHJvdG90eXBlLnB1YmxpY0lkPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzeXN0ZW1JZCAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gIAorRW50aXR5LnByb3RvdHlwZS5zeXN0ZW1JZD0iIjsgCisvKioKKyAqIFByb3BlcnR5IG5vdGF0aW9uTmFtZSAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sIAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gIAorRW50aXR5LnByb3RvdHlwZS5ub3RhdGlvbk5hbWU9IiI7IAorCisvKioKKyAqIE9iamVjdCBFbnRpdHlSZWZlcmVuY2UoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE5vZGUKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqIEBzZWUgTm9kZQorICovIAorZnVuY3Rpb24gRW50aXR5UmVmZXJlbmNlKCl7fTsKK0VudGl0eVJlZmVyZW5jZS5wcm90b3R5cGU9bmV3IE5vZGUoKTsKKworLyoqCisgKiBPYmplY3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBOb2RlCisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKiBAc2VlIE5vZGUKKyAqLyAKK2Z1bmN0aW9uIFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpe307IAorUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZT1uZXcgTm9kZSgpOworLyoqCisgKiBQcm9wZXJ0eSB0YXJnZXQgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLyAKK1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUudGFyZ2V0PSIiOworLyoqCisgKiBQcm9wZXJ0eSB0YXJnZXQgIAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwgCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gCitQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmRhdGE9IiI7IAorCisKKy8qSFRNTCBET00gQmVsb3cgdGhpcyBsaW5lKi8KKworLyoqCisgKiBPYmplY3QgSFRNTENvbGxlY3Rpb24oKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovIAorZnVuY3Rpb24gSFRNTENvbGxlY3Rpb24oKXt9OworSFRNTENvbGxlY3Rpb24ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgKiBQcm9wZXJ0eSBsZW5ndGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTENvbGxlY3Rpb24ucHJvdG90eXBlLmxlbmd0aD0wOworLyoqCisgKiBmdW5jdGlvbiBpdGVtKGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAcmV0dXJucyB7Tm9kZX0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpe3JldHVybiBuZXcgTm9kZSgpO307CisvKioKKyAqIGZ1bmN0aW9uIG5hbWVkSXRlbShuYW1lKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqIEByZXR1cm5zIHtOb2RlfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTENvbGxlY3Rpb24ucHJvdG90eXBlLm5hbWVkSXRlbSA9IGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IE5vZGUoKTt9OworCisvKioKKyAqIE9iamVjdCBIVE1MT3B0aW9uc0NvbGxlY3Rpb24oKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIE9iamVjdAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovIAorZnVuY3Rpb24gSFRNTE9wdGlvbnNDb2xsZWN0aW9uKCl7fTsKK0hUTUxPcHRpb25zQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbnNDb2xsZWN0aW9uLnByb3RvdHlwZS5sZW5ndGg9MDsKKy8qKgorICogZnVuY3Rpb24gaXRlbShpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHJldHVybnMge05vZGV9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uc0NvbGxlY3Rpb24ucHJvdG90eXBlLml0ZW0gPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBOb2RlKCk7fTsKKy8qKgorICogZnVuY3Rpb24gbmFtZWRJdGVtKG5hbWUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICogQHJldHVybnMge05vZGV9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uc0NvbGxlY3Rpb24ucHJvdG90eXBlLm5hbWVkSXRlbSA9IGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IE5vZGUoKTt9OworCisvKioKKyAqIE9iamVjdCBIVE1MRG9jdW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIERvY3VtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIERvY3VtZW50CisgKi8gCitmdW5jdGlvbiBIVE1MRG9jdW1lbnQoKXt9OworSFRNTERvY3VtZW50LnByb3RvdHlwZSA9IG5ldyBEb2N1bWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB0aXRsZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLnRpdGxlPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZWZlcnJlcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLnJlZmVycmVyPSIiOworLyoqCisgKiBQcm9wZXJ0eSBkb21haW4KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5kb21haW49IiI7CisvKioKKyAqIFByb3BlcnR5IFVSTAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLlVSTD0iIjsKKy8qKgorICogUHJvcGVydHkgYm9keQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUuYm9keT1uZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgaW1hZ2VzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5pbWFnZXM9bmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGFwcGxldHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLmFwcGxldHM9bmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGxpbmtzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5saW5rcz1uZXcgSFRNTENvbGxlY3Rpb24oKTsKKy8qKgorICogUHJvcGVydHkgZm9ybXMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLmZvcm1zPW5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBhbmNob3JzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5hbmNob3JzPW5ldyBIVE1MQ29sbGVjdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBjb29raWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUuY29va2llPSIiOworLyoqCisgKiBQcm9wZXJ0eSBsYXN0TW9kaWZpZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5sYXN0TW9kaWZpZWQ9IiI7CisvKioKKyAqIGZ1bmN0aW9uIG9wZW4oKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBjbG9zZSgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRG9jdW1lbnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiB3cml0ZSh0ZXh0KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IHRleHQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbih0ZXh0KXt9OworLyoqCisgKiBmdW5jdGlvbiB3cml0ZWxuKHRleHQpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gdGV4dAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERvY3VtZW50LnByb3RvdHlwZS53cml0ZWxuID0gZnVuY3Rpb24odGV4dCl7fTsKKy8qKgorICogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeU5hbWUoZWxlbWVudE5hbWUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge1N0cmluZ30gZWxlbWVudE5hbWUKKyAqIEByZXR1cm5zIHtOb2RlTGlzdH0KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEb2N1bWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeU5hbWUgPSBmdW5jdGlvbihlbGVtZW50TmFtZSl7cmV0dXJuIG5ldyBOb2RlTGlzdCgpO307CisKKy8qKgorICogT2JqZWN0IEhUTUxFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEVsZW1lbnQKKyAqLyAKK2Z1bmN0aW9uIEhUTUxFbGVtZW50KCl7fTsKK0hUTUxFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGlkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5pZD0iIjsKKy8qKgorICogUHJvcGVydHkgdGl0bGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLnRpdGxlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBsYW5nCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5sYW5nPSIiOworLyoqCisgKiBQcm9wZXJ0eSBkaXIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLmRpcj0iIjsKKy8qKgorICogUHJvcGVydHkgY2xhc3NOYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5jbGFzc05hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IGlubmVySFRNTAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLmlubmVySFRNTD0iIjsKKy8qKgorICogUHJvcGVydHkgb2Zmc2V0SGVpZ2h0CisgKiAKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUub2Zmc2V0SGVpZ2h0PTA7CisvKioKKyAqIFByb3BlcnR5IG9mZnNldFdpZHRoCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUub2Zmc2V0V2lkdGg9MDsKKy8qKgorICogUHJvcGVydHkgb2Zmc2V0TGVmdAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLm9mZnNldExlZnQ9MDsKKy8qKgorICogUHJvcGVydHkgb2Zmc2V0VG9wCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUub2Zmc2V0VG9wPTA7CisvKioKKyAqIFByb3BlcnR5IG9mZnNldFBhcmVudAorICogCisgKiBAdHlwZSBIVE1MRWxlbWVudAorICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUub2Zmc2V0UGFyZW50ID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHNjcm9sbEhlaWdodAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbEhlaWdodD0wOworLyoqCisgKiBQcm9wZXJ0eSBzY3JvbGxXaWR0aAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFdpZHRoPTA7CisvKioKKyAqIFByb3BlcnR5IHNjcm9sbExlZnQKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxMZWZ0PTA7CisvKioKKyAqIFByb3BlcnR5IHNjcm9sbFRvcAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvcD0wOworLyoqCisgKiBQcm9wZXJ0eSBzdHlsZQorICogCisgKiBAdHlwZSBDU1MyUHJvcGVydGllcworICovCitIVE1MRWxlbWVudC5wcm90b3R5cGUuc3R5bGUgPSBuZXcgQ1NTMlByb3BlcnRpZXMoKTsKKworLyoqCisgKiBPYmplY3QgSFRNTEh0bWxFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSHRtbEVsZW1lbnQoKXt9OworSFRNTEh0bWxFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB2ZXJzaW9uCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxIdG1sRWxlbWVudC5wcm90b3R5cGUudmVyc2lvbj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEhlYWRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSGVhZEVsZW1lbnQoKXt9OworSFRNTEhlYWRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBwcm9maWxlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxIZWFkRWxlbWVudC5wcm90b3R5cGUucHJvZmlsZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTExpbmtFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MTGlua0VsZW1lbnQoKXt9OworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5kaXNhYmxlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgY2hhcnNldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLmNoYXJzZXQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGhyZWYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5ocmVmPSIiOworLyoqCisgKiBQcm9wZXJ0eSBocmVmbGFuZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLmhyZWZsYW5nPSIiOworLyoqCisgKiBQcm9wZXJ0eSBtZWRpYQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLm1lZGlhPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZWwKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZS5yZWw9IiI7CisvKioKKyAqIFByb3BlcnR5IHJldgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLnJldj0iIjsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUudGFyZ2V0PSIiOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFRpdGxlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFRpdGxlRWxlbWVudCgpe307CitIVE1MVGl0bGVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB0ZXh0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUaXRsZUVsZW1lbnQucHJvdG90eXBlLnRleHQ9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxNZXRhRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE1ldGFFbGVtZW50KCl7fTsKK0hUTUxNZXRhRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY29udGVudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLmNvbnRlbnQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGh0dHBFcXVpdgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLmh0dHBFcXVpdj0iIjsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHNjaGVtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLnNjaGVtZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEJhc2VFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQmFzZUVsZW1lbnQoKXt9OworSFRNTEJhc2VFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBocmVmCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCYXNlRWxlbWVudC5wcm90b3R5cGUuaHJlZj0iIjsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCYXNlRWxlbWVudC5wcm90b3R5cGUudGFyZ2V0PSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MSXNJbmRleEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxJc0luZGV4RWxlbWVudCgpe307CitIVE1MSXNJbmRleEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElzSW5kZXhFbGVtZW50LnByb3RvdHlwZS5mb3JtPW5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgcHJvbXB0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJc0luZGV4RWxlbWVudC5wcm90b3R5cGUucHJvbXB0PSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MU3R5bGVFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MU3R5bGVFbGVtZW50KCl7fTsKK0hUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGRpc2FibGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZS5kaXNhYmxlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgbWVkaWEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUubWVkaWE9IiI7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEJvZHlFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQm9keUVsZW1lbnQoKXt9OworSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhTGluaworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLmFMaW5rPSIiOworLyoqCisgKiBQcm9wZXJ0eSBiYWNrZ3JvdW5kCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUuYmFja2dyb3VuZD0iIjsKKy8qKgorICogUHJvcGVydHkgYmdDb2xvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLmJnQ29sb3I9IiI7CisvKioKKyAqIFByb3BlcnR5IGxpbmsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZS5saW5rPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0ZXh0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUudGV4dD0iIjsKKy8qKgorICogUHJvcGVydHkgdkxpbmsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZS52TGluaz0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEZvcm1FbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MRm9ybUVsZW1lbnQoKXt9OworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBlbGVtZW50cworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTENvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuZWxlbWVudHM9bmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmxlbmd0aD0wOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgYWNjZXB0Q2hhcnNldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmFjY2VwdENoYXJzZXQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGFjdGlvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmFjdGlvbj0iIjsKKy8qKgorICogUHJvcGVydHkgZW5jdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmVuY3R5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IG1ldGhvZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLm1ldGhvZD0iIjsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUudGFyZ2V0PSIiOworLyoqCisgKiBmdW5jdGlvbiBzdWJtaXQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5zdWJtaXQgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIHJlc2V0KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpe307CisKKy8qKgorICogT2JqZWN0IEhUTUxTZWxlY3RFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MU2VsZWN0RWxlbWVudCgpe307CitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKy8qKgorICogUHJvcGVydHkgc2VsZWN0ZWRJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ZWRJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUudmFsdWU9IiI7CisvKioKKyAqIFByb3BlcnR5IGxlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLmxlbmd0aD0wOworLyoqCisgKiBQcm9wZXJ0eSBmb3JtCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5mb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBvcHRpb25zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5vcHRpb25zPSBuZXcgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGRpc2FibGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IG11bHRpcGxlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUubXVsdGlwbGU9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHNpemUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnNpemU9MDsKKy8qKgorICogUHJvcGVydHkgdGFiSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnRhYkluZGV4PTA7CisvKioKKyAqIGZ1bmN0aW9uIGFkZChlbGVtZW50LCBiZWZvcmUpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50CisgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBiZWZvcmUKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgYmVmb3JlKXt9OworLyoqCisgKiBmdW5jdGlvbiByZW1vdmUoaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpbmRleCl7fTsKKy8qKgorICogZnVuY3Rpb24gYmx1cigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gZm9jdXMoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24oKXt9OworCisvKioKKyAqIE9iamVjdCBIVE1MT3B0R3JvdXBFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MT3B0R3JvdXBFbGVtZW50KCl7fTsKK0hUTUxPcHRHcm91cEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGRpc2FibGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0R3JvdXBFbGVtZW50LnByb3RvdHlwZS5kaXNhYmxlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgbGFiZWwKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdEdyb3VwRWxlbWVudC5wcm90b3R5cGUubGFiZWw9IiI7CisKKy8qKgorICogT2JqZWN0IE9wdGlvbigpCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0CisgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gZGVmYXVsdFNlbGVjdGVkCisgKiBAcGFyYW0ge0Jvb2xlYW59IHNlbGVjdGVkCisgKi8KK2Z1bmN0aW9uIE9wdGlvbih0ZXh0LCB2YWx1ZSwgZGVmYXVsdFNlbGVjdGVkLCBzZWxlY3RlZCl7fTsKK09wdGlvbi5wcm90b3R5cGUgPSBuZXcgSFRNTE9wdGlvbkVsZW1lbnQoKTsKKy8qKgorICogT2JqZWN0IEhUTUxPcHRpb25FbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MT3B0aW9uRWxlbWVudCgpe307CitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUuZm9ybSA9IG5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdFNlbGVjdGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUuZGVmYXVsdFNlbGVjdGVkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSB0ZXh0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZS50ZXh0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBpbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUuaW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgZGlzYWJsZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZS5kaXNhYmxlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgbGFiZWwKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLmxhYmVsPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzZWxlY3RlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLnNlbGVjdGVkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUudmFsdWU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxJbnB1dEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxJbnB1dEVsZW1lbnQoKXt9OworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdFZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRWYWx1ZT0iIjsKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdENoZWNrZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRDaGVja2VkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBmb3JtCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmZvcm0gPSBuZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFjY2VwdAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5hY2NlcHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGFjY2Vzc0tleQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5hY2Nlc3NLZXk9IiI7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuYWx0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaGVja2VkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5jaGVja2VkPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBkaXNhYmxlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IG1hc0xlbmd0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5tYXhMZW5naHQ9MDsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZWFkT25seQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUucmVhZE9ubHk9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHNpemUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuc2l6ZT0wOworLyoqCisgKiBQcm9wZXJ0eSBzcmMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuc3JjPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0YWJJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS50YWJJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHVzZU1hcAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS51c2VNYXA9IiI7CisvKioKKyAqIFByb3BlcnR5IHZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnZhbHVlPSIiOworLyoqCisgKiBmdW5jdGlvbiBibHVyKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGZvY3VzKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBzZWxlY3QoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBjbGljaygpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5jbGljayA9IGZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBPYmplY3QgSFRNTFRleHRBcmVhRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFRleHRBcmVhRWxlbWVudCgpe307CitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBkZWZhdWx0VmFsdWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuZGVmYXVsdFZhbHVlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBmb3JtCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLmZvcm09IG5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWNjZXNzS2V5CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLmFjY2Vzc0tleT0iIjsKKy8qKgorICogUHJvcGVydHkgY29scworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5jb2xzPTA7CisvKioKKyAqIFByb3BlcnR5IGRpc2FibGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5kaXNhYmxlZD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZWFkT25seQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUucmVhZE9ubHk9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHJvd3MKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUucm93cz0wOworLyoqCisgKiBQcm9wZXJ0eSB0YWJJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS50YWJJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnZhbHVlPSIiOworLyoqCisgKiBmdW5jdGlvbiBibHVyKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGZvY3VzKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBzZWxlY3QoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oKXt9OworCisvKioKKyAqIE9iamVjdCBIVE1MQnV0dG9uRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEJ1dHRvbkVsZW1lbnQoKXt9OworSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLmZvcm0gPSBuZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFjY2Vzc0tleQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUuYWNjZXNzS2V5ID0gIiI7CisvKioKKyAqIFByb3BlcnR5IGRpc2FibGVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZWQ9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHRhYkluZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZS50YWJJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2YWx1ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUudmFsdWU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxMYWJlbEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxMYWJlbEVsZW1lbnQoKXt9OworSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGFiZWxFbGVtZW50LnByb3RvdHlwZS5mb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhY2Nlc3NLZXkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUuYWNjZXNzS2V5PSIiOworLyoqCisgKiBQcm9wZXJ0eSBodG1sRm9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlLmh0bWxGb3I9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxGaWVsZFNldEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxGaWVsZFNldEVsZW1lbnQoKXt9OworSFRNTEZpZWxkU2V0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZS5mb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudCgpOworCisvKioKKyAqIE9iamVjdCBIVE1MTGVnZW5kRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTExlZ2VuZEVsZW1lbnQoKXt9OworSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZvcm0KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxGb3JtRWxlbWVudAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlLmZvcm0gPSBuZXcgSFRNTEZvcm1FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFjY2Vzc0tleQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGVnZW5kRWxlbWVudC5wcm90b3R5cGUuYWNjZXNzS2V5PSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTGVnZW5kRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxVTGlzdEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxVTGlzdEVsZW1lbnQoKXt9OworSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY29tcGFjdAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUuY29tcGFjdD1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVUxpc3RFbGVtZW50LnByb3RvdHlwZS50eXBlPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MT0xpc3RFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MT0xpc3RFbGVtZW50KCl7fTsKK0hUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbXBhY3QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlLmNvbXBhY3Q9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHN0YXJ0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlLnN0YXJ0PTA7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTERMaXN0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTERMaXN0RWxlbWVudCgpe307CitIVE1MRExpc3RFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb21wYWN0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBCb29sZWFuCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRExpc3RFbGVtZW50LnByb3RvdHlwZS5jb21wYWN0PWZhbHNlOworCisvKioKKyAqIE9iamVjdCBIVE1MRGlyZWN0b3J5RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTERpcmVjdG9yeUVsZW1lbnQoKXt9OworSFRNTERpcmVjdG9yeUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbXBhY3QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxEaXJlY3RvcnlFbGVtZW50LnByb3RvdHlwZS5jb21wYWN0PWZhbHNlOworCisvKioKKyAqIE9iamVjdCBIVE1MTWVudUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxNZW51RWxlbWVudCgpe307CitIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbXBhY3QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxNZW51RWxlbWVudC5wcm90b3R5cGUuY29tcGFjdD1mYWxzZTsKKworLyoqCisgKiBPYmplY3QgSFRNTExJRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTExJRWxlbWVudCgpe307CitIVE1MTElFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB0eXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMSUVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHZhbHVlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxMSUVsZW1lbnQucHJvdG90eXBlLnZhbHVlPTA7CisKKy8qKgorICogT2JqZWN0IEhUTUxEaXZFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MRGl2RWxlbWVudCgpe307CitIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MUGFyYWdyYXBoRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFBhcmFncmFwaEVsZW1lbnQoKXt9OworSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTEhlYWRpbmdFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSGVhZGluZ0VsZW1lbnQoKXt9OworSFRNTEhlYWRpbmdFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSGVhZGluZ0VsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MUXVvdGVFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MUXVvdGVFbGVtZW50KCl7fTsKK0hUTUxRdW90ZUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxRdW90ZUVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MUHJlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFByZUVsZW1lbnQoKXt9OworSFRNTFByZUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxQcmVFbGVtZW50LnByb3RvdHlwZS53aWR0aD0wOworCisvKioKKyAqIE9iamVjdCBIVE1MQlJFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQlJFbGVtZW50KCl7fTsKK0hUTUxCUkVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNsZWFyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCUkVsZW1lbnQucHJvdG90eXBlLmNsZWFyPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MQmFzZUZvbnRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQmFzZUZvbnRFbGVtZW50KCl7fTsKK0hUTUxCYXNlRm9udEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbG9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCYXNlRm9udEVsZW1lbnQucHJvdG90eXBlLmNvbG9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBmYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxCYXNlRm9udEVsZW1lbnQucHJvdG90eXBlLmZhY2U9IiI7CisvKioKKyAqIFByb3BlcnR5IHNpemUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEJhc2VGb250RWxlbWVudC5wcm90b3R5cGUuc2l6ZT0wOworCisvKioKKyAqIE9iamVjdCBIVE1MQmFzZUZvbnRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MRm9udEVsZW1lbnQoKXt9OworSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjb2xvcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9udEVsZW1lbnQucHJvdG90eXBlLmNvbG9yPSIiOworLyoqCisgKiBQcm9wZXJ0eSBmYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGb250RWxlbWVudC5wcm90b3R5cGUuZmFjZT0iIjsKKy8qKgorICogUHJvcGVydHkgc2l6ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRm9udEVsZW1lbnQucHJvdG90eXBlLnNpemU9MDsKKworLyoqCisgKiBPYmplY3QgSFRNTEhSRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEhSRWxlbWVudCgpe307CitIVE1MSFJFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSFJFbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgbm9TaGFkZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEhSRWxlbWVudC5wcm90b3R5cGUubm9TaGFkZT1mYWxzZTsKKy8qKgorICogUHJvcGVydHkgc2l6ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSFJFbGVtZW50LnByb3RvdHlwZS5zaXplPSIiOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSFJFbGVtZW50LnByb3RvdHlwZS53aWR0aD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTE1vZEVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxNb2RFbGVtZW50KCl7fTsKK0hUTUxNb2RFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjaXRlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxNb2RFbGVtZW50LnByb3RvdHlwZS5jaXRlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBkYXRlVGltZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUuZGF0ZVRpbWU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxBbmNob3JFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQW5jaG9yRWxlbWVudCgpe307CitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWNjZXNzS2V5CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5hY2Nlc3NLZXk9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoYXJzZXQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLmNoYXJzZXQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvb3JkcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUuY29vcmRzPSIiOworLyoqCisgKiBQcm9wZXJ0eSBocmVmCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5ocmVmPSIiOworLyoqCisgKiBQcm9wZXJ0eSBocmVmbGFuZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUuaHJlZmxhbmc9IiI7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHJlbAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUucmVsPSIiOworLyoqCisgKiBQcm9wZXJ0eSByZXYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLnJldj0iIjsKKy8qKgorICogUHJvcGVydHkgc2hhcGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLnNoYXBlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB0YWJJbmRleAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUudGFiSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS50YXJnZXQ9IiI7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIGZ1bmN0aW9uIGJsdXIoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGZvY3VzKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBPYmplY3QgSW1hZ2UoKQorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge051bWJlcn0gd2lkdGgKKyAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQKKyAqLworZnVuY3Rpb24gSW1hZ2Uod2lkdGgsIGhlaWdodCl7fTsKK0ltYWdlLnByb3RvdHlwZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KCk7CisvKioKKyAqIE9iamVjdCBIVE1MSW1hZ2VFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MSW1hZ2VFbGVtZW50KCl7fTsKK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisvKioKKyAqIFByb3BlcnR5IGFsdAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZS5hbHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGJvcmRlcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZS5ib3JkZXI9IiI7CisvKioKKyAqIFByb3BlcnR5IGhlaWdodAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgTnVtYmVyCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZS5oZWlnaHQ9MDsKKy8qKgorICogUHJvcGVydHkgaHNwYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLmhzcGFjZT0wOworLyoqCisgKiBQcm9wZXJ0eSBpc01hcAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuaXNNYXA9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IGxvbmdEZXNjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLmxvbmdEZXNjPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzcmMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuc3JjPSIiOworLyoqCisgKiBQcm9wZXJ0eSB1c2VNYXAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUudXNlTWFwPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2c3BhY2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUudnNwYWNlPTA7CisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLndpZHRoPTA7CisKKy8qKgorICogT2JqZWN0IEhUTUxPYmplY3RFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MT2JqZWN0RWxlbWVudCgpe307CitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgZm9ybQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTEZvcm1FbGVtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuZm9ybSA9IG5ldyBIVE1MRm9ybUVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgY29kZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuY29kZT0iIjsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBhcmNoaXZlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5hcmNoaXZlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBib3JkZXIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmJvcmRlcj0iIjsKKy8qKgorICogUHJvcGVydHkgY29kZUJhc2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmNvZGVCYXNlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb2RlVHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuY29kZVR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IGRhdGEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmRhdGE9IiI7CisvKioKKyAqIFByb3BlcnR5IGRlY2xhcmUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5kZWNsYXJlPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBoZWlnaHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLmhlaWdodD0iIjsKKy8qKgorICogUHJvcGVydHkgaHNwYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5oc3BhY2U9MDsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgc3RhbmRieQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUuc3RhbmRieT0iIjsKKy8qKgorICogUHJvcGVydHkgdGFiSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLnRhYkluZGV4PTA7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLnR5cGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHVzZU1hcAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUudXNlTWFwPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2c3BhY2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLnZzcGFjZT0wOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUud2lkdGg9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvbnRlbnREb2N1bWVudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgRG9jdW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZS5jb250ZW50RG9jdW1lbnQ9IG5ldyBIVE1MRG9jdW1lbnQoKTsKKworLyoqCisgKiBPYmplY3QgSFRNTFBhcmFtRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFBhcmFtRWxlbWVudCgpe307CitIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHR5cGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKy8qKgorICogUHJvcGVydHkgdmFsdWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUudmFsdWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHZhbHVlVHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZS52YWx1ZVR5cGU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxBcHBsZXRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MQXBwbGV0RWxlbWVudCgpe307CitIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmFsdD0iIjsKKy8qKgorICogUHJvcGVydHkgYXJjaGl2ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUuYXJjaGl2ZT0iIjsKKy8qKgorICogUHJvcGVydHkgY29kZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUuY29kZT0iIjsKKy8qKgorICogUHJvcGVydHkgY29kZUJhc2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmNvZGVCYXNlPSIiOworLyoqCisgKiBQcm9wZXJ0eSBoZWlnaHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmhpZ2h0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBoc3BhY2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLmhzcGFjZT0wOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS5uYW1lPSIiOworLyoqCisgKiBQcm9wZXJ0eSBvYmplY3QKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLm9iamVjdD0iIjsKKy8qKgorICogUHJvcGVydHkgdnNwYWNlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZS52c3BhY2U9MDsKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLndpZHRoPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MTWFwRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTE1hcEVsZW1lbnQoKXt9OworSFRNTE1hcEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFyZWFzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MQ29sbGVjdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1hcEVsZW1lbnQucHJvdG90eXBlLmFyZWFzID0gbmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTE1hcEVsZW1lbnQucHJvdG90eXBlLm5hbWU9IiI7CisKKy8qKgorICogT2JqZWN0IEhUTUxBcmVhRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTEFyZWFFbGVtZW50KCl7fTsKK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWNjZXNzS2V5CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUuYWNjZXNzS2V5PSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZS5hbHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvb3JkcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLmNvb3Jkcz0iIjsKKy8qKgorICogUHJvcGVydHkgaHJlZgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLmhyZWY9IiI7CisvKioKKyAqIFByb3BlcnR5IG5vSHJlZgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgQm9vbGVhbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZS5ub0hyZWY9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHNoYXBlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUuc2hhcGU9IiI7CisvKioKKyAqIFByb3BlcnR5IHRhYkluZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUudGFiSW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgdGFyZ2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUudGFyZ2V0PSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MU2NyaXB0RWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFNjcmlwdEVsZW1lbnQoKXt9OworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHRleHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLnRleHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGh0bWxGb3IKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLmh0bWxGb3I9IiI7CisvKioKKyAqIFByb3BlcnR5IGV2ZW50CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZS5ldmVudD0iIjsKKy8qKgorICogUHJvcGVydHkgY2hhcnNldAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUuY2hhcnNldD0iIjsKKy8qKgorICogUHJvcGVydHkgZGVmZXIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLmRlZmVyPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzcmMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLnNyYz0iIjsKKy8qKgorICogUHJvcGVydHkgdHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUudHlwZT0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFRhYmxlRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFRhYmxlRWxlbWVudCgpe307CitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjYXB0aW9uCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNhcHRpb24gPSBuZXcgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgdEhlYWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUudEhlYWQgPSBuZXcgSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSB0Rm9vdAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS50Rm9vdCA9IG5ldyBIVE1MVGFibGVTZWxlY3Rpb25FbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IHJvd3MKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5yb3dzID0gbmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IHRCb2RpZXMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEhUTUxDb2xsZWN0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS50Qm9kaWVzID0gbmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBiZ0NvbG9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmJnQ29sb3I9IiI7CisvKioKKyAqIFByb3BlcnR5IGJvcmRlcgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5ib3JkZXI9IiI7CisvKioKKyAqIFByb3BlcnR5IGNlbGxQYWRkaW5nCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNlbGxQYWRkaW5nPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjZWxsU3BhY2luZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5jZWxsU3BhY2luZz0iIjsKKy8qKgorICogUHJvcGVydHkgZnJhbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZnJhbWU9IiI7CisvKioKKyAqIFByb3BlcnR5IHJ1bGVzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLnJ1bGVzPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzdW1tYXJ5CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLnN1bW1hcnk9IiI7CisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLndpZHRoPSIiOworLyoqCisgKiBmdW5jdGlvbiBjcmVhdGVUSGVhZCgpOworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHJldHVybnMge0hUTUxFbGVtZW50fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlVEhlYWQgPSBmdW5jdGlvbigpe3JldHVybiBuZXcgSFRNTEVsZW1lbnQoKTt9OworLyoqCisgKiBmdW5jdGlvbiBkZWxldGVUSGVhZCgpOworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlVEhlYWQgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGNyZWF0ZVRGb290KCk7CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVURm9vdCA9IGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307CisvKioKKyAqIGZ1bmN0aW9uIGRlbGV0ZVRGb290KCk7CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5kZWxldGVURm9vdCA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gY3JlYXRlQ2FwdGlvbigpOworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHJldHVybnMge0hUTUxFbGVtZW50fQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlQ2FwdGlvbiA9IGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307CisvKioKKyAqIGZ1bmN0aW9uIGRlbGV0ZUNhcHRpb24oKTsKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmRlbGV0ZUNhcHRpb24gPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGluc2VydFJvdyhpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHJldHVybnMge0hUTUxFbGVtZW50fQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmluc2VydFJvdyA9IGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IEhUTUxFbGVtZW50KCk7fTsKKy8qKgorICogZnVuY3Rpb24gZGVsZXRlUm93KGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlUm93ID0gZnVuY3Rpb24oaW5kZXgpe307CisKKy8qKgorICogT2JqZWN0IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCgpe307CitIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgYWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MVGFibGVDb2xFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MVGFibGVDb2xFbGVtZW50KCl7fTsKK0hUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZS5jaD0iIjsKKy8qKgorICogUHJvcGVydHkgY2hPZmYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUuY2hPZmY9IiI7CisvKioKKyAqIFByb3BlcnR5IHNwYW4KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUuc3Bhbj0wOworLyoqCisgKiBQcm9wZXJ0eSB2QWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUudkFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZS53aWR0aD0iIjsKKworLyoqCisgKiBPYmplY3QgSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudCgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAYXVnbWVudHMgSFRNTEVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqIEBzZWUgSFRNTEVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudCgpe307CitIVE1MVGFibGVTZWxlY3Rpb25FbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVTZWxlY3Rpb25FbGVtZW50LnByb3RvdHlwZS5hbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgY2gKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudC5wcm90b3R5cGUuY2g9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoT2ZmCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQucHJvdG90eXBlLmNoT2ZmPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2QWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudC5wcm90b3R5cGUudkFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSByb3dzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQucHJvdG90eXBlLnJvd3M9IiI7CisvKioKKyAqIGZ1bmN0aW9uIGluc2VydFJvdyhpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHJldHVybnMge0hUTUxFbGVtZW50fQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVNlbGVjdGlvbkVsZW1lbnQucHJvdG90eXBlLmluc2VydFJvdyA9IGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gbmV3IEhUTUxFbGVtZW50KCk7fTsKKy8qKgorICogZnVuY3Rpb24gZGVsZXRlUm93KGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlU2VsZWN0aW9uRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlUm93ID0gZnVuY3Rpb24oaW5kZXgpe307CisKKy8qKgorICogT2JqZWN0IEhUTUxUYWJsZVJvd0VsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxUYWJsZVJvd0VsZW1lbnQoKXt9OworSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTEVsZW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgcm93SW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUucm93SW5kZXg9MDsKKy8qKgorICogUHJvcGVydHkgc2VjdGlvblJvd0luZGV4CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLnNlY3Rpb25Sb3dJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSBjZWxscworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgSFRNTENvbGxlY3Rpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLmNlbGxzID0gbmV3IEhUTUxDb2xsZWN0aW9uKCk7CisvKioKKyAqIFByb3BlcnR5IGFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLmFsaWduPSIiOworLyoqCisgKiBQcm9wZXJ0eSBiZ0NvbG9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLmJnQ29sb3I9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLmNoPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjaE9mZgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5jaE9mZj0iIjsKKy8qKgorICogUHJvcGVydHkgdkFsaWduCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLnZBbGlnbj0iIjsKKy8qKgorICogZnVuY3Rpb24gaW5zZXJ0Q2VsbChpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQHJldHVybnMge0hUTUxFbGVtZW50fQorICogQHRocm93cyBET01FeGNlcHRpb24KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLmluc2VydENlbGwgPSBmdW5jdGlvbihpbmRleCl7cmV0dXJuIG5ldyBIVE1MRWxlbWVudCgpO307CisvKioKKyAqIGZ1bmN0aW9uIGluc2VydENlbGwoaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5kZWxldGVDZWxsID0gZnVuY3Rpb24oaW5kZXgpe307CisKKy8qKgorICogT2JqZWN0IEhUTUxUYWJsZVJvd0VsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxUYWJsZUNlbGxFbGVtZW50KCl7fTsKK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBjZWxsSW5kZXgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmNlbGxJbmRleD0wOworLyoqCisgKiBQcm9wZXJ0eSBhYmJyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5hYmJyPSIiOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisvKioKKyAqIFByb3BlcnR5IGF4aXMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmF4aXM9IiI7CisvKioKKyAqIFByb3BlcnR5IGJnQ29sb3IKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmJnQ29sb3I9IiI7CisvKioKKyAqIFByb3BlcnR5IGNoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5jaD0iIjsKKy8qKgorICogUHJvcGVydHkgY2hPZmYKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmNoT2ZmPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb2xTcGFuCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5jb2xTcGFuPTA7CisvKioKKyAqIFByb3BlcnR5IGhlYWRlcnMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLmhlYWRlcnM9IiI7CisvKioKKyAqIFByb3BlcnR5IGhlaWdodAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUuaGVpZ2h0PSIiOworLyoqCisgKiBQcm9wZXJ0eSBub1dyYXAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZS5ub1dyYXA9ZmFsc2U7CisvKioKKyAqIFByb3BlcnR5IHJvd1NwYW4KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIE51bWJlcgorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLnJvd1NwYW49MDsKKy8qKgorICogUHJvcGVydHkgc2NvcGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLnNjb3BlPSIiOworLyoqCisgKiBQcm9wZXJ0eSB2QWxpZ24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLnZBbGlnbj0iIjsKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLndpZHRoPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MRnJhbWVTZXRFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MRnJhbWVTZXRFbGVtZW50KCl7fTsKK0hUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGNvbHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUuY29scz0iIjsKKy8qKgorICogUHJvcGVydHkgcm93cworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZS5yb3dzPSIiOworCisvKioKKyAqIE9iamVjdCBIVE1MRnJhbWVFbGVtZW50KCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MRnJhbWVFbGVtZW50KCl7fTsKK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisvKioKKyAqIFByb3BlcnR5IGZyYW1lQm9yZGVyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLmZyYW1lQm9yZGVyPSIiOworLyoqCisgKiBQcm9wZXJ0eSBsb25nRGVzYworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZS5sb25nRGVzYz0iIjsKKy8qKgorICogUHJvcGVydHkgbWFyZ2luSGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLm1hcmdpbkhlaWdodD0iIjsKKy8qKgorICogUHJvcGVydHkgbWFyZ2luV2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUubWFyZ2luV2lkdGg9IiI7CisvKioKKyAqIFByb3BlcnR5IG5hbWUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgbm9SZXNpemUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLm5vUmVzaXplPWZhbHNlOworLyoqCisgKiBQcm9wZXJ0eSBzY3JvbGxpbmcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsaW5nPSIiOworLyoqCisgKiBQcm9wZXJ0eSBzcmMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIFN0cmluZworICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEhUTUwgU3BlY2lmaWNhdGlvbi4KKyAqLworSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUuc3JjPSIiOworLyoqCisgKiBQcm9wZXJ0eSBjb250ZW50RG9jdW1lbnQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvUkVDLURPTS1MZXZlbC0yLUhUTUwtMjAwMzAxMDkvaHRtbC5odG1sCisgKiAKKyAqIEB0eXBlIERvY3VtZW50CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZS5jb250ZW50RG9jdW1lbnQ9IG5ldyBIVE1MRG9jdW1lbnQoKTsKKworLyoqCisgKiBPYmplY3QgSFRNTElGcmFtZUVsZW1lbnQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQGF1Z21lbnRzIEhUTUxFbGVtZW50CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKiBAc2VlIEhUTUxFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxJRnJhbWVFbGVtZW50KCl7fTsKK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MRWxlbWVudCgpOworLyoqCisgKiBQcm9wZXJ0eSBhbGlnbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUuYWxpZ249IiI7CisvKioKKyAqIFByb3BlcnR5IGZyYW1lQm9yZGVyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5mcmFtZUJvcmRlcj0iIjsKKy8qKgorICogUHJvcGVydHkgaGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5oZWlnaHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IGxvbmdEZXNjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5sb25nRGVzYz0iIjsKKy8qKgorICogUHJvcGVydHkgbWFyZ2luSGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5tYXJnaW5IZWlnaHQ9IiI7CisvKioKKyAqIFByb3BlcnR5IG1hcmdpbldpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5tYXJnaW5XaWR0aD0iIjsKKy8qKgorICogUHJvcGVydHkgbmFtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICogUHJvcGVydHkgc2Nyb2xsaW5nCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbAorICogCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxpbmc9IiI7CisvKioKKyAqIFByb3BlcnR5IHNyYworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUuc3JjPSIiOworLyoqCisgKiBQcm9wZXJ0eSB3aWR0aAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgU3RyaW5nCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgSFRNTCBTcGVjaWZpY2F0aW9uLgorICovCitIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUud2lkdGg9IiI7CisvKioKKyAqIFByb3BlcnR5IGNvbnRlbnREb2N1bWVudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9SRUMtRE9NLUxldmVsLTItSFRNTC0yMDAzMDEwOS9odG1sLmh0bWwKKyAqIAorICogQHR5cGUgRG9jdW1lbnQKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBIVE1MIFNwZWNpZmljYXRpb24uCisgKi8KK0hUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5jb250ZW50RG9jdW1lbnQ9IG5ldyBIVE1MRG9jdW1lbnQoKTsKKworLyogU3R5bGVzaGVldHMgKi8KKy8qKgorICogT2JqZWN0IENTUzJQcm9wZXJ0aWVzKCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLVN0eWxlLTIwMDAxMTEzL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAorICogCisgKiBAYXVnbWVudHMgT2JqZWN0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBTdHlsZSBTcGVjaWZpY2F0aW9uLgorICovCitmdW5jdGlvbiBDU1MyUHJvcGVydGllcygpe307CitDU1MyUHJvcGVydGllcy5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9icm93c2VyV2luZG93LmpzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9icm93c2VyV2luZG93LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYmY0NTIKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL2Jyb3dzZXJXaW5kb3cuanMKQEAgLTAsMCArMSw2MTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTMgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZnVuY3Rpb24gQmFyUHJvcCgpe307CitCYXJQcm9wLnByb3RvdHlwZSA9IG5ldyBBcnJheSgpOworCisvKioKKyAqIE9iamVjdCBXaW5kb3coKQorICogQHN1cGVyIEdsb2JhbAorICogQGNvbnN0cnVjdG9yCisgKiBAc2luY2UgQ29tbW9uIFVzYWdlLCBubyBzdGFuZGFyZAorKi8KK2Z1bmN0aW9uIFdpbmRvdygpe307CitXaW5kb3cucHJvdG90eXBlID0gbmV3IEV2ZW50VGFyZ2V0KCk7CitXaW5kb3cucHJvdG90eXBlLnNlbGYgPSBuZXcgV2luZG93KCk7CitXaW5kb3cucHJvdG90eXBlLndpbmRvdyA9IG5ldyBXaW5kb3coKTsKK1dpbmRvdy5wcm90b3R5cGUuZnJhbWVzID0gbmV3IEFycmF5KCk7CisvKioKKyAqIFByb3BlcnR5IGNsb3NlZAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmNsb3NlZCA9IG5ldyBCb29sZWFuKCk7CisvKioKKyAqIFByb3BlcnR5IGRlZmF1bHRTdGF0dXMKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmRlZmF1bHRTdGF0dXMgPSAiIjsKKy8qKgorICogUHJvcGVydHkgZG9jdW1lbnQKKyAqIEB0eXBlIERvY3VtZW50CisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuZG9jdW1lbnQ9IG5ldyBIVE1MRG9jdW1lbnQoKTsKKy8qKgorICogUHJvcGVydHkgaGlzdG9yeQorICogQHR5cGUgSGlzdG9yeQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmhpc3Rvcnk9IG5ldyBIaXN0b3J5KCk7CisvKioKKyAqIFByb3BlcnR5IGxvY2F0aW9uCisgKiBAdHlwZSBMb2NhdGlvbgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmxvY2F0aW9uPW5ldyBMb2NhdGlvbigpOworLyoqCisgKiBQcm9wZXJ0eSBuYW1lCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5uYW1lID0gIiI7CisvKioKKyAqIFByb3BlcnR5IG5hdmlnYXRvcgorICogQHR5cGUgTmF2aWdhdG9yCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUubmF2aWdhdG9yID0gbmV3IE5hdmlnYXRvcigpOworLyoqCisgKiBQcm9wZXJ0eSBvcGVuZXIKKyAqIEB0eXBlIFdpbmRvdworICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLm9wZW5lciA9IG5ldyBXaW5kb3coKTsKKy8qKgorICogUHJvcGVydHkgb3V0ZXJXaWR0aAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUub3V0ZXJXaWR0aCA9IDA7CisvKioKKyAqIFByb3BlcnR5IG91dGVySGVpZ2h0CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5vdXRlckhlaWdodCA9IDA7CisvKioKKyAqIFByb3BlcnR5IHBhZ2VYT2Zmc2V0CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5wYWdlWE9mZnNldCA9IDA7CisvKioKKyAqIFByb3BlcnR5IHBhZ2VZT2Zmc2V0CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5wYWdlWU9mZnNldCA9IDA7CisvKioKKyAqIFByb3BlcnR5IHBhcmVudAorICogQHR5cGUgV2luZG93CisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUucGFyZW50ID0gbmV3IFdpbmRvdygpOworLyoqCisgKiBQcm9wZXJ0eSBzY3JlZW4KKyAqIEB0eXBlIFNjcmVlbgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNjcmVlbiA9IG5ldyBTY3JlZW4oKTsKKy8qKgorICogUHJvcGVydHkgc3RhdHVzCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5zdGF0dXMgPSAiIjsKKy8qKgorICogUHJvcGVydHkgdG9wCisgKiBAdHlwZSBXaW5kb3cKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS50b3AgPSBuZXcgV2luZG93KCk7CisKKworLyoKKyAqIFRoZXNlIHByb3BlcnRpZXMgbWF5IG5lZWQgdG8gYmUgbW92ZWQgaW50byBhIGJyb3dzd2VyIHNwZWNpZmljIGxpYnJhcnkuCisgKi8KKworIC8qKgorICogUHJvcGVydHkgaW5uZXJXaWR0aAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuaW5uZXJXaWR0aCA9IDA7CisvKioKKyAqIFByb3BlcnR5IGlubmVySGVpZ2h0CisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5pbm5lckhlaWdodCA9IDA7CisvKioKKyAqIFByb3BlcnR5IHNjcmVlblgKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNjcmVlblggPSAwOworLyoqCisgKiBQcm9wZXJ0eSBzY3JlZW5ZCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5zY3JlZW5ZID0gMDsKKy8qKgorICogUHJvcGVydHkgc2NyZWVuTGVmdAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2NyZWVuTGVmdCA9IDA7CisvKioKKyAqIFByb3BlcnR5IHNjcmVlblRvcAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2NyZWVuVG9wID0gMDsKKy8vV2luZG93LnByb3RvdHlwZS5ldmVudCA9IG5ldyBFdmVudCgpOworV2luZG93LnByb3RvdHlwZS5sZW5ndGggPSAwOworV2luZG93LnByb3RvdHlwZS5zY3JvbGxiYXJzPSBuZXcgQmFyUHJvcCgpOworV2luZG93LnByb3RvdHlwZS5zY3JvbGxYPTA7CitXaW5kb3cucHJvdG90eXBlLnNjcm9sbFk9MDsKK1dpbmRvdy5wcm90b3R5cGUuY29udGVudD0gbmV3IFdpbmRvdygpOworV2luZG93LnByb3RvdHlwZS5tZW51YmFyPSBuZXcgQmFyUHJvcCgpOworV2luZG93LnByb3RvdHlwZS50b29sYmFyPSBuZXcgQmFyUHJvcCgpOworV2luZG93LnByb3RvdHlwZS5sb2NhdGlvbmJhcj0gbmV3IEJhclByb3AoKTsKK1dpbmRvdy5wcm90b3R5cGUucGVyc29uYWxiYXI9IG5ldyBCYXJQcm9wKCk7CitXaW5kb3cucHJvdG90eXBlLnN0YXR1c2Jhcj0gbmV3IEJhclByb3AoKTsKK1dpbmRvdy5wcm90b3R5cGUuZGlyZWN0b3JpZXM9IG5ldyBCYXJQcm9wKCk7CitXaW5kb3cucHJvdG90eXBlLnNjcm9sbE1heFg9MDsKK1dpbmRvdy5wcm90b3R5cGUuc2Nyb2xsTWF4WT0wOworV2luZG93LnByb3RvdHlwZS5mdWxsU2NyZWVuPSIiOworV2luZG93LnByb3RvdHlwZS5mcmFtZUVsZW1lbnQ9IiI7CisvKiBFbmQgcHJvcGVyaXRlcyAqLworCisvKioKKyAqIGZ1bmN0aW9uIGFsZXJ0KCkgCisgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24obWVzc2FnZSl7fTsKKy8qKgorICogZnVuY3Rpb24gYmx1cigpIAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJRCkgCisgKiBAcGFyYW0gaW50ZXJ2YWxJRAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpbnRlcnZhbElEKXt9OworLyoqCisgKiBmdW5jdGlvbiBjbGVhclRpbWVvdXQoaW50ZXJ2YWxJRCkgCisgKiBAcGFyYW0gaW50ZXJ2YWxJRAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGludGVydmFsSUQpe307CisvKioKKyAqIGZ1bmN0aW9uIGNsb3NlKCkgCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIGNvbmZpcm0oKSAKKyAqIEBwYXJhbSB7U3RyaW5nfSBhcmcKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEByZXR1cm5zIHtCb29sZWFufQorICovCitXaW5kb3cucHJvdG90eXBlLmNvbmZpcm0gPSBmdW5jdGlvbihhcmcpe3JldHVybiBmYWxzZTt9OworLyoqCisgKiBmdW5jdGlvbiBmb2N1cygpIAorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIHBzZXVkb0VsdCApIAorICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgKiBAcGFyYW0ge1N0cmluZ30gcHNldWRvRWx0IAorICogQG1lbWJlck9mIFdpbmRvdworICogQHJldHVybnMge09iamVjdH0KKyAqLworV2luZG93LnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCxwc2V1ZG9FbHQgKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisvKioKKyAqIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSAKKyAqIEBwYXJhbSB7TnVtYmVyfSB4CisgKiBAcGFyYW0ge051bWJlcn0geQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uKHgseSl7fTsKKy8qKgorICogZnVuY3Rpb24gbW92ZUJ5KGRlbHRhWCwgZGVsdGFZKSAKKyAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVgKKyAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5tb3ZlQnkgPSBmdW5jdGlvbihkZWx0YVgsZGVsdGFZKXt9OworLyoqCisgKiBmdW5jdGlvbiBvcGVuKG9wdGlvbmFsQXJnMSwgb3B0aW9uYWxBcmcyLCBvcHRpb25hbEFyZzMsIG9wdGlvbmFsQXJnNCkgCisgKiBAcGFyYW0ge1N0cmluZ30gdXJsCisgKiBAcGFyYW0ge1N0cmluZ30gd2luZG93TmFtZQorICogQHBhcmFtIHtTdHJpbmd9IHdpbmRvd0ZlYXR1cmVzCisgKiBAcGFyYW0ge0Jvb2xlYW59IG9wdGlvbmFsQXJnNAorICogQG1lbWJlck9mIFdpbmRvdworICogQHJldHVybnMge1dpbmRvd30KKyAqLworV2luZG93LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24odXJsLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcywgb3B0aW9uYWxBcmc0KXtyZXR1cm4gbmV3IFdpbmRvdygpO307CisvKioKKyAqIGZ1bmN0aW9uIHByaW50KCkgCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUucHJpbnQgPSBmdW5jdGlvbigpe307CisvKioKKyAqIGZ1bmN0aW9uIHByb21wdCh0ZXh0LCB2YWx1ZSkgCisgKiBAcGFyYW0ge1N0cmluZ30gdGV4dAorICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlCisgKiBAbWVtYmVyT2YgV2luZG93CisgKiBAcmV0dXJucyB7U3RyaW5nfQorICovCitXaW5kb3cucHJvdG90eXBlLnByb21wdCA9IGZ1bmN0aW9uKHRleHQsIHZhbHVlKXtyZXR1cm4gIiI7fTsKKy8qKgorICogZnVuY3Rpb24gcmVzaXplVG8obmV3T3V0ZXJXaWR0aCxuZXdPdXRlckhlaWdodCkgCisgKiBAcGFyYW0ge051bWJlcn0gbmV3T3V0ZXJXaWR0aAorICogQHBhcmFtIHtOdW1iZXJ9IG5ld091dGVySGVpZ2hyCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUucmVzaXplVG89ZnVuY3Rpb24obmV3T3V0ZXJXaWR0aCxuZXdPdXRlckhlaWdodCl7fTsKKy8qKgorICogZnVuY3Rpb24gcmVzaXplQnkoZGVsdGFYLCBkZWx0YVkpIAorICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhWAorICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhWQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnJlc2l6ZUJ5PWZ1bmN0aW9uKGRlbHRhWCxkZWx0YVkpe307CisvKioKKyAqIGZ1bmN0aW9uIHNjcm9sbFRvKHgseSkgCisgKiBAcGFyYW0ge051bWJlcn0geAorICogQHBhcmFtIHtOdW1iZXJ9IHkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqLworV2luZG93LnByb3RvdHlwZS5zY3JvbGxUbz1mdW5jdGlvbih4LHkpe307CisvKioKKyAqIGZ1bmN0aW9uIHNjcm9sbEJ5KHBpeGVsWCxwaXhlbFkpIAorICogQHBhcmFtIHtOdW1iZXJ9IHBpeGVsWAorICogQHBhcmFtIHtOdW1iZXJ9IHBpeGVsWQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLnNjcm9sbEJ5PWZ1bmN0aW9uKHBpeGVsWCxwaXhlbFkpe307CisvKioKKyAqIGZ1bmN0aW9uIHNldEludGVydmFsKGFyZzEsIGFyZzIpIAorICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAqIEBwYXJhbSB7TnVtYmVyfSBkZWxheQorICogQG1lbWJlck9mIFdpbmRvdworICogQHJldHVybnMge051bWJlcn0KKyAqLworV2luZG93LnByb3RvdHlwZS5zZXRJbnRlcnZhbD1mdW5jdGlvbihjYWxsYmFjaywgZGVsYXkpe3JldHVybiAwO307CisvKioKKyAqIGZ1bmN0aW9uIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSAKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisgKiBAcGFyYW0ge051bWJlcn0gZGVsYXkKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEByZXR1cm5zIHtOdW1iZXJ9CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2V0VGltZW91dD1mdW5jdGlvbihjYWxsYmFjaywgZGVsYXkpeyByZXR1cm4gMDt9OworLyoqCisgKiBmdW5jdGlvbiBhdG9iKGVuY29kZWREYXRhKSAKKyAqIEBwYXJhbSB7U3RyaW5nfSBlbmNvZGVkRGF0YQorICogQG1lbWJlck9mIFdpbmRvdworICogQHJldHVybnMge1N0cmluZ30KKyAqLworV2luZG93LnByb3RvdHlwZS5hdG9iPWZ1bmN0aW9uKGVuY29kZWREYXRhKXtyZXR1cm4gIiI7fTsKKy8qKgorICogZnVuY3Rpb24gYnRvYShhcmcpIAorICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1RvRW5jb2RlCisgKiBAbWVtYmVyT2YgV2luZG93CisgKiBAcmV0dXJucyB7U3RyaW5nfQorICovCitXaW5kb3cucHJvdG90eXBlLmJ0b2E9ZnVuY3Rpb24oc3RyaW5nVG9FbmNvZGUpe3JldHVybiAiIjt9OworLyoqCisgKiBmdW5jdGlvbiBzZXRSZXNpemFibGUocmVzaXphYmxlKSAKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzaXphYmxlCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2V0UmVzaXphYmxlPWZ1bmN0aW9uKHJlc2l6YWJsZSl7fTsKKworV2luZG93LnByb3RvdHlwZS5jYXB0dXJlRXZlbnRzPWZ1bmN0aW9uKGV2ZW50VHlwZSl7fTsKK1dpbmRvdy5wcm90b3R5cGUucmVsZWFzZUV2ZW50cz1mdW5jdGlvbihldmVudFR5cGUpe307CitXaW5kb3cucHJvdG90eXBlLnJvdXRlRXZlbnQ9ZnVuY3Rpb24oZXZlbnRUeXBlKXt9OworV2luZG93LnByb3RvdHlwZS5lbmFibGVFeHRlcm5hbENhcHR1cmU9ZnVuY3Rpb24oKXt9OworV2luZG93LnByb3RvdHlwZS5kaXNhYmxlRXh0ZXJuYWxDYXB0dXJlPWZ1bmN0aW9uKCl7fTsKK1dpbmRvdy5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe307CitXaW5kb3cucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt9OworV2luZG93LnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7fTsKK1dpbmRvdy5wcm90b3R5cGUuaG9tZT1mdW5jdGlvbigpe307CitXaW5kb3cucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt9OworLyoqCisgKiBAcGFyYW0ge051bWJlcn0gcGl4ZWxYCisgKiBAcGFyYW0ge051bWJlcn0gcGl4ZWxZCisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2Nyb2xsPWZ1bmN0aW9uKHBpeGVsWCxwaXhlbFkpe307CisvKiBFbmQgZnVuY3Rpb25zICovCisKKy8qKgorICAqIE9iamVjdCBIaXN0b3J5KCkKKyAgKiBAc3VwZXIgT2JqZWN0CisgICogQGNvbnN0cnVjdG9yCisgICogQHNpbmNlIENvbW1vbiBVc2FnZSwgbm8gc3RhbmRhcmQKKyAqLworZnVuY3Rpb24gSGlzdG9yeSgpe307CitIaXN0b3J5LnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CitIaXN0b3J5LnByb3RvdHlwZS5oaXN0b3J5ID0gbmV3IEhpc3RvcnkoKTsKKy8qKgorICogUHJvcGVydHkgbGVuZ3RoCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIaXN0b3J5CisgKi8KK0hpc3RvcnkucHJvdG90eXBlLmxlbmd0aCA9IDA7CisvKioKKyAqIGZ1bmN0aW9uIGJhY2soKQorICogQG1lbWJlck9mIEhpc3RvcnkKKyAqLworSGlzdG9yeS5wcm90b3R5cGUuYmFjayA9IGZ1bmN0aW9uKCl7fTsKKy8qKgorICogZnVuY3Rpb24gZm9yd2FyZCgpCisgKiBAbWVtYmVyT2YgSGlzdG9yeQorICovCitIaXN0b3J5LnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24oKXt9OworLyoqCisgKiBmdW5jdGlvbiBiYWNrKCkKKyAqIEBwYXJhbSBhcmcKKyAqIEBtZW1iZXJPZiBIaXN0b3J5CisgKi8KK0hpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24oYXJnKXt9OworCisvKioKKyAgKiBPYmplY3QgTG9jYXRpb24oKQorICAqIEBzdXBlciBPYmplY3QKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAc2luY2UgQ29tbW9uIFVzYWdlLCBubyBzdGFuZGFyZAorICovCitmdW5jdGlvbiBMb2NhdGlvbigpe307CitMb2NhdGlvbi5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CitMb2NhdGlvbi5wcm90b3R5cGUubG9jYXRpb24gPSBuZXcgTG9jYXRpb24oKTsKKy8qKgorICogUHJvcGVydHkgaGFzaAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLmhhc2ggPSAiIjsKKy8qKgorICogUHJvcGVydHkgaG9zdAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLmhvc3QgPSAiIjsKKy8qKgorICogUHJvcGVydHkgaG9zdG5hbWUKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5ob3N0bmFtZSA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBocmVmCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBMb2NhdGlvbgorICovCitMb2NhdGlvbi5wcm90b3R5cGUuaHJlZiA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBwYXRobmFtZQorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLnBhdGhuYW1lID0gIiI7CisvKioKKyAqIFByb3BlcnR5IHBvcnQKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5wb3J0ID0gIiI7CisvKioKKyAqIFByb3BlcnR5IHByb3RvY29sCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBMb2NhdGlvbgorICovCitMb2NhdGlvbi5wcm90b3R5cGUucHJvdG9jb2wgPSAiIjsKKy8qKgorICogUHJvcGVydHkgc2VhcmNoCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBMb2NhdGlvbgorICovCitMb2NhdGlvbi5wcm90b3R5cGUuc2VhcmNoID0gIiI7CisvKioKKyAqIGZ1bmN0aW9uIGFzc2lnbihhcmcpCisgKiBAcGFyYW0ge1N0cmluZ30gYXJnCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLmFzc2lnbiA9IGZ1bmN0aW9uKGFyZyl7fTsKKy8qKgorICogZnVuY3Rpb24gcmVsb2FkKG9wdGlvbmFsQXJnKQorICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25hbEFyZworICogQG1lbWJlck9mIExvY2F0aW9uCisgKi8KK0xvY2F0aW9uLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihvcHRpb25hbEFyZyl7fTsKKy8qKgorICogZnVuY3Rpb24gcmVwbGFjZShhcmcpCisgKiBAcGFyYW0ge1N0cmluZ30gYXJnCisgKiBAbWVtYmVyT2YgTG9jYXRpb24KKyAqLworTG9jYXRpb24ucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbihhcmcpe307CisKKy8qKgorICogT2JqZWN0IE5hdmlnYXRvcigpCisgKiBAc3VwZXIgT2JqZWN0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBDb21tb24gVXNhZ2UsIG5vIHN0YW5kYXJkCisqLworZnVuY3Rpb24gTmF2aWdhdG9yKCl7fTsKK05hdmlnYXRvci5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CitOYXZpZ2F0b3IucHJvdG90eXBlLm5hdmlnYXRvciA9IG5ldyBOYXZpZ2F0b3IoKTsKKy8qKgorICogUHJvcGVydHkgYXBwQ29kZU5hbWUKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmFwcENvZGVOYW1lID0gIiI7CisvKioKKyAqIFByb3BlcnR5IGFwcE5hbWUKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmFwcE5hbWUgPSAiIjsKKy8qKgorICogUHJvcGVydHkgYXBwVmVyc2lvbgorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgTmF2aWdhdG9yCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUuYXBwVmVyc2lvbiA9ICIiOworLyoqCisgKiBQcm9wZXJ0eSBjb29raWVFbmFibGVkCisgKiBAdHlwZSBCb29sZWFuCisgKiBAbWVtYmVyT2YgTmF2aWdhdG9yCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUuY29va2llRW5hYmxlZCA9IG5ldyBCb29sZWFuKCk7CisvKioKKyAqIFByb3BlcnR5IG1pbWVUeXBlcworICogQHR5cGUgQXJyYXkKKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5taW1lVHlwZXMgPSBuZXcgQXJyYXkoKTsKKy8qKgorICogUHJvcGVydHkgcGxhdGZvcm0KKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLnBsYXRmb3JtID0gIiI7CisvKioKKyAqIFByb3BlcnR5IHBsdWdpbnMKKyAqIEB0eXBlIEFycmF5CisgKiBAbWVtYmVyT2YgTmF2aWdhdG9yCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUucGx1Z2lucyA9IG5ldyBBcnJheSgpOworLyoqCisgKiBQcm9wZXJ0eSB1c2VyQWdlbnQKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLnVzZXJBZ2VudCA9ICIiOworLyoqCisgKiBmdW5jdGlvbiBqYXZhRW5hYmxlZCgpCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqIEBtZW1iZXJPZiBOYXZpZ2F0b3IKKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS5qYXZhRW5hYmxlZCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlO307CisKKy8qKgorICogT2JqZWN0IFNjcmVlbigpCisgKiBAc3VwZXIgT2JqZWN0CisgKiBAY29uc3RydWN0b3IKKyAqIEBzaW5jZSBDb21tb24gVXNhZ2UsIG5vIHN0YW5kYXJkCisqLworZnVuY3Rpb24gU2NyZWVuKCl7fTsKK1NjcmVlbi5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CitTY3JlZW4ucHJvdG90eXBlLnNjcmVlbiA9IG5ldyBTY3JlZW4oKTsKKy8qKgorICogUHJvcGVydHkgYXZhaWxIZWlnaHQKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFNjcmVlbgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmF2YWlsSGVpZ2h0ID0gMDsKKy8qKgorICogUHJvcGVydHkgYXZhaWxXaWR0aAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgU2NyZWVuCisgKi8KK05hdmlnYXRvci5wcm90b3R5cGUuYXZhaWxXaWR0aCA9IDA7CisvKioKKyAqIFByb3BlcnR5IGNvbG9yRGVwdGgKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFNjcmVlbgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmNvbG9yRGVwdGggPSAwOworLyoqCisgKiBQcm9wZXJ0eSBoZWlnaHQKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFNjcmVlbgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmhlaWdodCA9IDA7CisvKioKKyAqIFByb3BlcnR5IHdpZHRoCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBTY3JlZW4KKyAqLworTmF2aWdhdG9yLnByb3RvdHlwZS53aWR0aCA9IDA7CisKK0V2ZW50LnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisvLyBQaGFzZVR5cGUKK0V2ZW50LnByb3RvdHlwZS5DQVBUVVJJTkdfUEhBU0UgPSAxOworRXZlbnQucHJvdG90eXBlLkFUX1RBUkdFVCA9IDI7CitFdmVudC5wcm90b3R5cGUuQlVCQkxJTkdfUEhBU0UgPSAzOworCitFdmVudC5wcm90b3R5cGUudHlwZT0iIjsKK0V2ZW50LnByb3RvdHlwZS50YXJnZXQ9bmV3IEV2ZW50VGFyZ2V0KCk7CitFdmVudC5wcm90b3R5cGUuY3VycmVudFRhcmdldD1uZXcgRXZlbnRUYXJnZXQoKTsKK0V2ZW50LnByb3RvdHlwZS5ldmVudFBoYXNlPTA7CitFdmVudC5wcm90b3R5cGUuYnViYmxlcz1mYWxzZTsKK0V2ZW50LnByb3RvdHlwZS5jYW5jZWxhYmxlPWZhbHNlOworRXZlbnQucHJvdG90eXBlLnRpbWVTdGFtcD0wOworRXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe307CitFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt9OworLyoqCisgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRUeXBlQXJnCisgKiBAcGFyYW0ge0Jvb2xlYW59IGNhbkJ1YmJsZUFyZworICogQHBhcmFtIHtCb29sZWFufSBjYW5jZWxhYmxlQXJnCisgKi8KK0V2ZW50LnByb3RvdHlwZS5pbml0RXZlbnQ9ZnVuY3Rpb24oZXZlbnRUeXBlQXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQnViYmxlQXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZUFyZyl7fTsKK2Z1bmN0aW9uIEV2ZW50TGlzdGVuZXIoKXt9OworRXZlbnRMaXN0ZW5lci5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICogQG1lbWJlck9mIEV2ZW50TGlzdGVuZXIKKyAqLworRXZlbnRMaXN0ZW5lci5wcm90b3R5cGUuaGFuZGxlRXZlbnQ9ZnVuY3Rpb24oZXZlbnQpe307CisKK2Z1bmN0aW9uIEV2ZW50VGFyZ2V0KCl7fTsKK0V2ZW50VGFyZ2V0LnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisvKgorICogVGhlc2UgZnVuY3Rpb25zIG1heSBuZWVkIHRvIGJlIG1vdmVkIGludG8gYSBicm93c2VyIHNwZWNpZmljIGxpYnJhcnkuCisgKi8KKy8qKgorICogQG1lbWJlck9mIFdpbmRvdworICogQHBhcmFtIGV2ZW50IHtFdmVudH0KKyAqIEB0aHJvd3Mge0V2ZW50RXhjZXB0aW9ufQorICovCitFdmVudFRhcmdldC5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihldmVudCl7fTsKKworLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9ET00vZWxlbWVudC5hZGRFdmVudExpc3RlbmVyCisvKioKKyAqIEBtZW1iZXJPZiBXaW5kb3cKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKiBAcGFyYW0ge0V2ZW50TGlzdGVuZXJ9IGxpc3RlbmVyCisgKiBAcGFyYW0ge0Jvb2xlYW59IHVzZUNhcHR1cmUKKyAqLworRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpe307CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIKKy8qKgorICogQG1lbWJlck9mIFdpbmRvdworICogQHBhcmFtIHtTdHJpbmd9IHR5cGUKKyAqIEBwYXJhbSB7RXZlbnRMaXN0ZW5lcn0gbGlzdGVuZXIKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gdXNlQ2FwdHVyZQorICovCitFdmVudFRhcmdldC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSl7fTsKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvZG9tNS5qcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMvZG9tNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTk5YWI2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9kb201LmpzCkBAIC0wLDAgKzEsOTIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1zZWxlY3RvcnMtYXBpLTIwMTIxMjEzCisgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JzCisgKiBAbWVtYmVyT2YgRG9jdW1lbnQKKyAqIEByZXR1cm5zIHtFbGVtZW50fSAgICAgIAorICovIAorRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oc2VsZWN0b3JzKXtyZXR1cm4gbmV3IEVsZW1lbnQoKTt9OworCisvKioKKyAqIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1zZWxlY3RvcnMtYXBpLTIwMTIxMjEzCisgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JzCisgKiBAbWVtYmVyT2YgRG9jdW1lbnQKKyAqIEByZXR1cm5zIHtOb2RlTGlzdH0gICAgICAKKyAqLyAKK0RvY3VtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHNlbGVjdG9ycyl7cmV0dXJuIG5ldyBOb2RlTGlzdCgpO307CisKKy8qKgorICogZnVuY3Rpb24gcXVlcnlTZWxlY3RvcihzZWxlY3RvcnMpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLXNlbGVjdG9ycy1hcGktMjAxMjEyMTMKKyAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvcnMKKyAqIEBtZW1iZXJPZiBEb2N1bWVudEZyYWdtZW50CisgKiBAcmV0dXJucyB7RWxlbWVudH0gICAgICAKKyAqLyAKK0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oc2VsZWN0b3JzKXtyZXR1cm4gbmV3IEVsZW1lbnQoKTt9OworCisvKioKKyAqIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1zZWxlY3RvcnMtYXBpLTIwMTIxMjEzCisgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JzCisgKiBAbWVtYmVyT2YgRG9jdW1lbnRGcmFnbWVudAorICogQHJldHVybnMge05vZGVMaXN0fSAgICAgIAorICovIAorRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbihzZWxlY3RvcnMpe3JldHVybiBuZXcgTm9kZUxpc3QoKTt9OworCisvKioKKyAqIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1zZWxlY3RvcnMtYXBpLTIwMTIxMjEzCisgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JzCisgKiBAbWVtYmVyT2YgRWxlbWVudAorICogQHJldHVybnMge0VsZW1lbnR9ICAgICAgCisgKi8gCitFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKHNlbGVjdG9ycyl7cmV0dXJuIG5ldyBFbGVtZW50KCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItc2VsZWN0b3JzLWFwaS0yMDEyMTIxMworICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9ycworICogQG1lbWJlck9mIEVsZW1lbnQKKyAqIEByZXR1cm5zIHtOb2RlTGlzdH0gICAgICAKKyAqLyAKK0VsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24oc2VsZWN0b3JzKXtyZXR1cm4gbmV3IE5vZGVMaXN0KCk7fTsKKworLyoqCisgKiBQcm9wZXJ0eSBzdGF0ZQorICogQHR5cGUgT2JqZWN0CisgKiBAbWVtYmVyT2YgSGlzdG9yeQorICovCitIaXN0b3J5LnByb3RvdHlwZS5zdGF0ZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogZnVuY3Rpb24gcHVzaFN0YXRlKGRhdGEsdGl0bGUsdXJsKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi1odG1sNS0yMDEyMTIxNy9icm93c2Vycy5odG1sI2hpc3RvcnkKKyAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgKiBAcGFyYW0ge1N0cmluZ30gdGl0bGUKKyAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBvcHRpb25hbAorICogQG1lbWJlck9mIEhpc3RvcnkKKyAqLworSGlzdG9yeS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKGRhdGEsdGl0bGUsdXJsKXt9OworCisvKioKKyAqIGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShkYXRhLHRpdGxlLHVybCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1ItaHRtbDUtMjAxMjEyMTcvYnJvd3NlcnMuaHRtbCNoaXN0b3J5CisgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICogQHBhcmFtIHtTdHJpbmd9IHRpdGxlCisgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gb3B0aW9uYWwKKyAqIEBtZW1iZXJPZiBIaXN0b3J5CisgKi8KK0hpc3RvcnkucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbihkYXRhLHRpdGxlLHVybCl7fTsKKworLyoqCisgKiBQcm9wZXJ0eSBzZXNzaW9uU3RvcmFnZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKiBAdHlwZSBTdG9yYWdlCisgKiBAbWVtYmVyT2YgV2luZG93CisgKi8KK1dpbmRvdy5wcm90b3R5cGUuc2Vzc2lvblN0b3JhZ2U9bmV3IFN0b3JhZ2UoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBsb2NhbFN0b3JhZ2UKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvQ1Itd2Vic3RvcmFnZS0yMDExMTIwOAorICogQHR5cGUgU3RvcmFnZQorICogQG1lbWJlck9mIFdpbmRvdworICovCitXaW5kb3cucHJvdG90eXBlLmxvY2FsU3RvcmFnZT1uZXcgU3RvcmFnZSgpOworCisvKioKKyAqIE9iamVjdCBTdG9yYWdlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL0NSLXdlYnN0b3JhZ2UtMjAxMTEyMDgKKyAqLworZnVuY3Rpb24gU3RvcmFnZSgpe307CitTdG9yYWdlLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogUHJvcGVydHkgbGVuZ3RoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL0NSLXdlYnN0b3JhZ2UtMjAxMTEyMDgKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFN0b3JhZ2UKKyAqLworU3RvcmFnZS5wcm90b3R5cGUubGVuZ3RoPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBmdW5jdGlvbiBrZXkoaW5kZXgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL0NSLXdlYnN0b3JhZ2UtMjAxMTEyMDgKKyAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleAorICogQG1lbWJlck9mIFN0b3JhZ2UKKyAqIEByZXR1cm5zIFN0cmluZworICovCitTdG9yYWdlLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oaW5kZXgpe3JldHVybiBuZXcgU3RyaW5nKCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBnZXRJdGVtKGtleSkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvQ1Itd2Vic3RvcmFnZS0yMDExMTIwOAorICogQHBhcmFtIHtTdHJpbmd9IGtleQorICogQG1lbWJlck9mIFN0b3JhZ2UKKyAqIEByZXR1cm5zIFN0cmluZworICovCitTdG9yYWdlLnByb3RvdHlwZS5nZXRJdGVtPWZ1bmN0aW9uKGtleSl7cmV0dXJuIG5ldyBTdHJpbmcoKTt9OworCisvKioKKyAqIGZ1bmN0aW9uIHNldEl0ZW0oa2V5LHZhbHVlKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKiBAcGFyYW0ge1N0cmluZ30ga2V5CisgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUKKyAqIEBtZW1iZXJPZiBTdG9yYWdlCisgKi8KK1N0b3JhZ2UucHJvdG90eXBlLnNldEl0ZW09ZnVuY3Rpb24oa2V5LHZhbHVlKXt9OworCisvKioKKyAqIGZ1bmN0aW9uIHJlbW92ZUl0ZW0oa2V5KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9DUi13ZWJzdG9yYWdlLTIwMTExMjA4CisgKiBAcGFyYW0ge1N0cmluZ30ga2V5CisgKiBAbWVtYmVyT2YgU3RvcmFnZQorICovCitTdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGtleSl7fTsKKworLyoqCisgKiBmdW5jdGlvbiBjbGVhcigpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL0NSLXdlYnN0b3JhZ2UtMjAxMTEyMDgKKyAqIEBtZW1iZXJPZiBTdG9yYWdlCisgKi8KK1N0b3JhZ2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBPYmplY3QgV2ViU29ja2V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLXdlYnNvY2tldHMtMjAxMjA5MjAKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtTdHJpbmd9IHVybAorICovCitmdW5jdGlvbiBXZWJTb2NrZXQodXJsKXt9OworV2ViU29ja2V0LnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogQ29uc3RhbnQgV2ViU29ja2V0LkNPTk5FQ1RJTkc9MAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkc9MDsKKworLyoqCisgKiBDb25zdGFudCBXZWJTb2NrZXQuT1BFTj0xCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLXdlYnNvY2tldHMtMjAxMjA5MjAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuT1BFTj0xOworCisvKioKKyAqIENvbnN0YW50IFdlYlNvY2tldC5DTE9TSU5HPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HPTI7CisKKy8qKgorICogQ29uc3RhbnQgV2ViU29ja2V0LkNMT1NFRD0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLXdlYnNvY2tldHMtMjAxMjA5MjAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0VEPTM7CisKKy8qKgorICogUHJvcGVydHkgdXJsCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL0NSLXdlYnNvY2tldHMtMjAxMjA5MjAKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIFdlYlNvY2tldAorICovCitXZWJTb2NrZXQucHJvdG90eXBlLnVybD1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogUHJvcGVydHkgcmVhZHlTdGF0ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5yZWFkeVN0YXRlPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBidWZmZXJlZEFtb3VudAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5idWZmZXJlZEFtb3VudD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgZXh0ZW5zaW9ucworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5leHRlbnNpb25zPW5ldyBTdHJpbmcoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBwcm90b2NvbAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5wcm90b2NvbD1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogUHJvcGVydHkgYmluYXJ5VHlwZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAdHlwZSBTdHJpbmcKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5iaW5hcnlUeXBlPW5ldyBTdHJpbmcoKTsKKworLyoqCisgKiBmdW5jdGlvbiBjbG9zZShjb2RlLHJlYXNvbikKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1Itd2Vic29ja2V0cy0yMDEyMDkyMAorICogQHBhcmFtIHtOdW1iZXJ9IGNvZGUgLSBvcHRpb25hbAorICogQHBhcmFtIHtTdHJpbmd9IHJlYXNvbiAtIG9wdGlvbmFsCisgKiBAbWVtYmVyT2YgV2ViU29ja2V0CisgKi8KK1dlYlNvY2tldC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oY29kZSxyZWFzb24pe307CisKKy8qKgorICogZnVuY3Rpb24gc2VuZChkYXRhKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi13ZWJzb2NrZXRzLTIwMTIwOTIwCisgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIG1heSBiZSBhIFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIG9yIEFycmF5QnVmZmVyVmlldyAKKyAqIEBtZW1iZXJPZiBXZWJTb2NrZXQKKyAqLworV2ViU29ja2V0LnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGRhdGEpe307CisKKy8qKgorICogUHJvcGVydHkgZ2VvbG9jYXRpb24KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBHZW9sb2NhdGlvbgorICogQG1lbWJlck9mIE5hdmlnYXRvcgorICovCitOYXZpZ2F0b3IucHJvdG90eXBlLmdlb2xvY2F0aW9uPW5ldyBHZW9sb2NhdGlvbigpOworCisvKioKKyAqIE9iamVjdCBHZW9sb2NhdGlvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqLworZnVuY3Rpb24gR2VvbG9jYXRpb24oKXt9OworR2VvbG9jYXRpb24ucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKworLyoqCisgKiBmdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb24oc3VjY2Vzc0NhbGxiYWNrLGVycm9yQ2FsbGJhY2ssb3B0aW9ucykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwLworICogQHBhcmFtIHtGdW5jdGlvbn0gc3VjY2Vzc0NhbGxiYWNrIChQb3NpdGlvbiBwb3MpCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvckNhbGxiYWNrIChQb3NpdGlvbkVycm9yIGVycm9yKSAtIG9wdGlvbmFsCisgKiBAcGFyYW0ge1Bvc2l0aW9uT3B0aW9uc30gb3B0aW9ucyAtIG9wdGlvbmFsCisgKiBAbWVtYmVyT2YgR2VvbG9jYXRpb24KKyAqLworR2VvbG9jYXRpb24ucHJvdG90eXBlLmdldEN1cnJlbnRQb3NpdGlvbj1mdW5jdGlvbihzdWNjZXNzQ2FsbGJhY2ssZXJyb3JDYWxsYmFjayxvcHRpb25zKXt9OworCisvKioKKyAqIGZ1bmN0aW9uIHdhdGNoUG9zaXRpb24oc3VjY2Vzc0NhbGxiYWNrLGVycm9yQ2FsbGJhY2ssb3B0aW9ucykKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwLworICogQHBhcmFtIHtGdW5jdGlvbn0gc3VjY2Vzc0NhbGxiYWNrIChQb3NpdGlvbiBwb3MpCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvckNhbGxiYWNrIChQb3NpdGlvbkVycm9yIGVycm9yKSAtIG9wdGlvbmFsCisgKiBAcGFyYW0ge1Bvc2l0aW9uT3B0aW9uc30gb3B0aW9ucyAtIG9wdGlvbmFsCisgKiBAbWVtYmVyT2YgR2VvbG9jYXRpb24KKyAqIEByZXR1cm5zIHtOdW1iZXJ9CisgKi8KK0dlb2xvY2F0aW9uLnByb3RvdHlwZS53YXRjaFBvc2l0aW9uPWZ1bmN0aW9uKHN1Y2Nlc3NDYWxsYmFjayxlcnJvckNhbGxiYWNrLG9wdGlvbnMpe3JldHVybiBuZXcgTnVtYmVyKCk7fTsKKworLyoqCisgKiBmdW5jdGlvbiBjbGVhcldhdGNoKHdhdGNoSWQpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHBhcmFtIHtOdW1iZXJ9IHdhdGNoSWQKKyAqIEBtZW1iZXJPZiBHZW9sb2NhdGlvbgorICovCitHZW9sb2NhdGlvbi5wcm90b3R5cGUuY2xlYXJXYXRjaD1mdW5jdGlvbih3YXRjaElkKXt9OworCisvKioKKyAqIE9iamVjdCBDb29yZGluYXRlcworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqLworZnVuY3Rpb24gQ29vcmRpbmF0ZXMoKXt9OworQ29vcmRpbmF0ZXMucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBsYXRpdHVkZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIENvb3JkaW5hdGVzCisgKi8KK0Nvb3JkaW5hdGVzLnByb3RvdHlwZS5sYXRpdHVkZT1uZXcgTnVtYmVyKCk7OworCisvKioKKyAqIFByb3BlcnR5IGxvbmdpdHVkZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIENvb3JkaW5hdGVzCisgKi8KK0Nvb3JkaW5hdGVzLnByb3RvdHlwZS5sb25naXR1ZGU9bmV3IE51bWJlcigpOzsKKworLyoqCisgKiBQcm9wZXJ0eSBhbHRpdHVkZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIENvb3JkaW5hdGVzCisgKi8KK0Nvb3JkaW5hdGVzLnByb3RvdHlwZS5hbHRpdHVkZT1uZXcgTnVtYmVyKCk7OworCisvKioKKyAqIFByb3BlcnR5IGFjY3VyYWN5CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgQ29vcmRpbmF0ZXMKKyAqLworQ29vcmRpbmF0ZXMucHJvdG90eXBlLmFjY3VyYWN5PW5ldyBOdW1iZXIoKTs7CisKKy8qKgorICogUHJvcGVydHkgYWx0aXR1ZGVBY2N1cmFjeQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIENvb3JkaW5hdGVzCisgKi8KK0Nvb3JkaW5hdGVzLnByb3RvdHlwZS5hbHRpdHVkZUFjY3VyYWN5PW5ldyBOdW1iZXIoKTs7CisKKy8qKgorICogUHJvcGVydHkgaGVhZGluZworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIENvb3JkaW5hdGVzCisgKi8KK0Nvb3JkaW5hdGVzLnByb3RvdHlwZS5oZWFkaW5nPW5ldyBOdW1iZXIoKTs7CisKKy8qKgorICogUHJvcGVydHkgc3BlZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBDb29yZGluYXRlcworICovCitDb29yZGluYXRlcy5wcm90b3R5cGUuc3BlZWQ9bmV3IE51bWJlcigpOworCisvKioKKyAqIE9iamVjdCBQb3NpdGlvbgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqLworZnVuY3Rpb24gUG9zaXRpb24oKXt9OworUG9zaXRpb24ucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBjb29yZHMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAdHlwZSBDb29yZGluYXRlcworICogQG1lbWJlck9mIFBvc2l0aW9uCisgKi8KK1Bvc2l0aW9uLnByb3RvdHlwZS5jb29yZHM9bmV3IENvb3JkaW5hdGVzKCk7CisKKy8qKgorICogUHJvcGVydHkgdGltZXN0YW1wCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgUG9zaXRpb24KKyAqLworUG9zaXRpb24ucHJvdG90eXBlLnRpbWVzdGFtcD1uZXcgTnVtYmVyOworCisvKioKKyAqIE9iamVjdCBQb3NpdGlvbkVycm9yCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICovCitmdW5jdGlvbiBQb3NpdGlvbkVycm9yKCl7fTsKK1Bvc2l0aW9uRXJyb3IucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKworLyoqCisgKiBDb25zdGFudCBQb3NpdGlvbkVycm9yLlBFUk1JU1NJT05fREVOSUVEPTEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitQb3NpdGlvbkVycm9yLnByb3RvdHlwZS5QRVJNSVNTSU9OX0RFTklFRD0xOworCisvKioKKyAqIENvbnN0YW50IFBvc2l0aW9uRXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEU9MgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK1Bvc2l0aW9uRXJyb3IucHJvdG90eXBlLlBPU0lUSU9OX1VOQVZBSUxBQkxFPTI7CisKKy8qKgorICogQ29uc3RhbnQgUG9zaXRpb25FcnJvci5USU1FT1VUPTMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvUFItZ2VvbG9jYXRpb24tQVBJLTIwMTIwNTEwCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitQb3NpdGlvbkVycm9yLnByb3RvdHlwZS5USU1FT1VUPTM7CisKKy8qKgorICogUHJvcGVydHkgY29kZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFBvc2l0aW9uRXJyb3IKKyAqLworUG9zaXRpb25FcnJvci5wcm90b3R5cGUuY29kZT1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgbWVzc2FnZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIFBvc2l0aW9uRXJyb3IKKyAqLworUG9zaXRpb25FcnJvci5wcm90b3R5cGUubWVzc2FnZT1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogT2JqZWN0IFBvc2l0aW9uT3B0aW9ucworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqLworZnVuY3Rpb24gUG9zaXRpb25PcHRpb25zKCl7fTsKK1Bvc2l0aW9uT3B0aW9ucy5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworCisvKioKKyAqIFByb3BlcnR5IGVuYWJsZUhpZ2hBY2N1cmFjeQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBtZW1iZXJPZiBQb3NpdGlvbk9wdGlvbnMKKyAqLworUG9zaXRpb25PcHRpb25zLnByb3RvdHlwZS5lbmFibGVIaWdoQWNjdXJhY3k9bmV3IEJvb2xlYW4oKTsKKworLyoqCisgKiBQcm9wZXJ0eSB0aW1lb3V0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1BSLWdlb2xvY2F0aW9uLUFQSS0yMDEyMDUxMAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgUG9zaXRpb25PcHRpb25zCisgKi8KK1Bvc2l0aW9uT3B0aW9ucy5wcm90b3R5cGUudGltZW91dD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgbWF4aW11bUFnZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9QUi1nZW9sb2NhdGlvbi1BUEktMjAxMjA1MTAKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFBvc2l0aW9uT3B0aW9ucworICovCitQb3NpdGlvbk9wdGlvbnMucHJvdG90eXBlLm1heGltdW1BZ2U9bmV3IE51bWJlcigpOworCisvKioKKyAqIE9iamVjdCBUaW1lUmFuZ2VzCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqLworZnVuY3Rpb24gVGltZVJhbmdlcygpe307CitUaW1lUmFuZ2VzLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisKKy8qKgorICogUHJvcGVydHkgbGVuZ3RoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFRpbWVSYW5nZXMKKyAqLworVGltZVJhbmdlcy5wcm90b3R5cGUubGVuZ3RoPW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBmdW5jdGlvbiBzdGFydChpbmRleCkKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4CisgKiBAbWVtYmVyT2YgVGltZVJhbmdlcworICogQHJldHVybnMge051bWJlcn0KKyAqLworZnVuY3Rpb24gc3RhcnQoaW5kZXgpIHtyZXR1cm4gbmV3IE51bWJlcigpO307CisKKy8qKgorICogZnVuY3Rpb24gZW5kKGluZGV4KQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAcGFyYW0ge051bWJlcn0gaW5kZXgKKyAqIEBtZW1iZXJPZiBUaW1lUmFuZ2VzCisgKiBAcmV0dXJucyB7TnVtYmVyfQorICovCitmdW5jdGlvbiBlbmQoaW5kZXgpIHtyZXR1cm4gbmV3IE51bWJlcigpO307CisKKy8qKgorICogT2JqZWN0IE1lZGlhRXJyb3IKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICovCitmdW5jdGlvbiBNZWRpYUVycm9yKCl7fTsKK01lZGlhRXJyb3IucHJvdG90eXBlPW5ldyBPYmplY3QoKTsKKworLyoqCisgKiBDb25zdGFudCBNZWRpYUVycm9yLk1FRElBX0VSUl9BQk9SVEVEPTEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworTWVkaWFFcnJvci5wcm90b3R5cGUuTUVESUFfRVJSX0FCT1JURUQ9MTsKKworLyoqCisgKiBDb25zdGFudCBNZWRpYUVycm9yLk1FRElBX0VSUl9ORVRXT1JLPTIKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworTWVkaWFFcnJvci5wcm90b3R5cGUuTUVESUFfRVJSX05FVFdPUks9MjsKKworLyoqCisgKiBDb25zdGFudCBNZWRpYUVycm9yLk1FRElBX0VSUl9ERUNPREVEPTMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworTWVkaWFFcnJvci5wcm90b3R5cGUuTUVESUFfRVJSX0RFQ09ERT0zOworCisvKioKKyAqIENvbnN0YW50IE1lZGlhRXJyb3IuTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEPTQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworTWVkaWFFcnJvci5wcm90b3R5cGUuTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEPTQ7CisKKy8qKgorICogUHJvcGVydHkgY29kZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBNZWRpYUVycm9yCisgKi8KK01lZGlhRXJyb3IucHJvdG90eXBlLmNvZGU9bmV3IE51bWJlcigpOworCisvKioKKyAqIE9iamVjdCBIVE1MTWVkaWFFbGVtZW50CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBhdWdtZW50cyBIVE1MRWxlbWVudAorICogQHNlZSBIVE1MRWxlbWVudAorICovCitmdW5jdGlvbiBIVE1MTWVkaWFFbGVtZW50KCl7fTsKK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlID0gbmV3IEhUTUxFbGVtZW50KCk7CisKKy8qKgorICogUHJvcGVydHkgc3JjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuc3JjPW5ldyBTdHJpbmcoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBjdXJyZW50U3JjCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuY3VycmVudFNyYz1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogUHJvcGVydHkgY3Jvc3NPcmlnaW4KKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5jcm9zc09yaWdpbj1uZXcgU3RyaW5nKCk7CisKKy8qKgorICogQ29uc3RhbnQgSFRNTE1lZGlhRWxlbWVudC5ORVRXT1JLX0VNUFRZPTAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19FTVBUWT0wOworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuTkVUV09SS19JRExFPTEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19JRExFPTE7CisKKy8qKgorICogQ29uc3RhbnQgSFRNTE1lZGlhRWxlbWVudC5ORVRXT1JLX0xPQURJTkc9MgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5ORVRXT1JLX0xPQURJTkc9MjsKKworLyoqCisgKiBDb25zdGFudCBIVE1MTWVkaWFFbGVtZW50Lk5FVFdPUktfTk9fU09VUkNFPTMKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuTkVUV09SS19OT19TT1VSQ0U9MzsKKworLyoqCisgKiBQcm9wZXJ0eSBuZXR3b3JrU3RhdGUKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5uZXR3b3JrU3RhdGU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHByZWxvYWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wcmVsb2FkPW5ldyBTdHJpbmcoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBidWZmZXJlZAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBUaW1lUmFuZ2VzCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5idWZmZXJlZD1uZXcgVGltZVJhbmdlcygpOworCisvKioKKyAqIGZ1bmN0aW9uIGxvYWQoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBmdW5jdGlvbiBjYW5QbGF5VHlwZSh0eXBlKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmNhblBsYXlUeXBlPWZ1bmN0aW9uKHR5cGUpe25ldyBTdHJpbmcoKTt9OworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuSEFWRV9OT1RISU5HPTAKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuSEFWRV9OT1RISU5HPTA7CisKKy8qKgorICogQ29uc3RhbnQgSFRNTE1lZGlhRWxlbWVudC5IQVZFX01FVEFEQVRBPTEKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQGNvbnN0YW50CisgKiBAdHlwZSBOdW1iZXIKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuSEFWRV9NRVRBREFUQT0xOworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuSEFWRV9DVVJSRU5UX0RBVEE9MgorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5IQVZFX0NVUlJFTlRfREFUQT0yOworCisvKioKKyAqIENvbnN0YW50IEhUTUxNZWRpYUVsZW1lbnQuSEFWRV9GVVRVUkVfREFUQT0zCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBjb25zdGFudAorICogQHR5cGUgTnVtYmVyCisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLkhBVkVfRlVUVVJFX0RBVEE9MzsKKworLyoqCisgKiBDb25zdGFudCBIVE1MTWVkaWFFbGVtZW50LkhBVkVfRU5PVUdIX0RBVEE9NAorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAY29uc3RhbnQKKyAqIEB0eXBlIE51bWJlcgorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5IQVZFX0VOT1VHSF9EQVRBPTQ7CisKKy8qKgorICogUHJvcGVydHkgcmVhZHlTdGF0ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnJlYWR5U3RhdGU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHNlZWtpbmcKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuc2Vla2luZz1uZXcgQm9vbGVhbigpOworCisvKioKKyAqIFByb3BlcnR5IGN1cnJlbnRUaW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuY3VycmVudFRpbWU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IGluaXRpYWxUaW1lCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLyAgICAgICAgIAorSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuaW5pdGlhbFRpbWU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IGR1cmF0aW9uCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuZHVyYXRpb249bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHN0YXJ0T2Zmc2V0VGltZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBEYXRlCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5zdGFydE9mZnNldFRpbWU9bmV3IERhdGUoKTsKKworLyoqCisgKiBQcm9wZXJ0eSBwYXVzZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucGF1c2VkPW5ldyBCb29sZWFuKCk7CisKKy8qKgorICogUHJvcGVydHkgZGVmYXVsdFBsYXliYWNrUmF0ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRQbGF5YmFja1JhdGU9bmV3IE51bWJlcigpOworCisvKioKKyAqIFByb3BlcnR5IHBsYXliYWNrUmF0ZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXliYWNrUmF0ZT1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgcGxheWVkCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFRpbWVSYW5nZXMKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXllZD1uZXcgVGltZVJhbmdlcygpOworCisvKioKKyAqIFByb3BlcnR5IHNlZWthYmxlCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFRpbWVSYW5nZXMKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnNlZWthYmxlPW5ldyBUaW1lUmFuZ2VzKCk7CisKKy8qKgorICogUHJvcGVydHkgZW5kZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuZW5kZWQ9bmV3IEJvb2xlYW4oKTsKKworLyoqCisgKiBQcm9wZXJ0eSBhdXRvcGxheQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBCb29sZWFuCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5hdXRvcGxheT1uZXcgQm9vbGVhbigpOworCisvKioKKyAqIFByb3BlcnR5IGxvb3AKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUubG9vcD1uZXcgQm9vbGVhbigpOworCisvKioKKyAqIGZ1bmN0aW9uIHBsYXkoKQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBmdW5jdGlvbiBwYXVzZSgpCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fTsKKworLyoqCisgKiBQcm9wZXJ0eSBjb250cm9scworICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBCb29sZWFuCisgKiBAbWVtYmVyT2YgSFRNTE1lZGlhRWxlbWVudAorICovCitIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5jb250cm9scz1uZXcgQm9vbGVhbigpOworCisvKioKKyAqIFByb3BlcnR5IHZvbHVtZQorICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMDMyOS9tZWRpYS1lbGVtZW50cy5odG1sCisgKiBAdHlwZSBOdW1iZXIKKyAqIEBtZW1iZXJPZiBIVE1MTWVkaWFFbGVtZW50CisgKi8KK0hUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnZvbHVtZT1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgbXV0ZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUubXV0ZWQ9bmV3IEJvb2xlYW4oKTsKKyAgICAgICAgIAorLyoqCisgKiBQcm9wZXJ0eSBkZWZhdWx0TXV0ZWQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgQm9vbGVhbgorICogQG1lbWJlck9mIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuZGVmYXVsdE11dGVkPW5ldyBCb29sZWFuKCk7CisKKy8qKgorICogT2JqZWN0IEhUTUxBdWRpb0VsZW1lbnQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvdGhlLWF1ZGlvLWVsZW1lbnQuaHRtbAorICogQGF1Z21lbnRzIEhUTUxNZWRpYUVsZW1lbnQKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtTdHJpbmd9IHNyYworICogQHNlZSBIVE1MTWVkaWFFbGVtZW50CisgKi8KK2Z1bmN0aW9uIEhUTUxBdWRpb0VsZW1lbnQoc3JjKXt9OworSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGUgPSBuZXcgSFRNTE1lZGlhRWxlbWVudCgpOworCisvKioKKyAqIE9iamVjdCBIVE1MVmlkZW9FbGVtZW50CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L3RoZS1hdWRpby1lbGVtZW50Lmh0bWwKKyAqIEBhdWdtZW50cyBIVE1MTWVkaWFFbGVtZW50CisgKiBAc2VlIEhUTUxNZWRpYUVsZW1lbnQKKyAqLworZnVuY3Rpb24gSFRNTFZpZGVvRWxlbWVudCgpe307CitIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSA9IG5ldyBIVE1MTWVkaWFFbGVtZW50KCk7CisKKy8qKgorICogUHJvcGVydHkgd2lkdGgKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTFZpZGVvRWxlbWVudAorICovCitIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZS53aWR0aD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgaGVpZ2h0CisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxWaWRlb0VsZW1lbnQKKyAqLworSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUuaGVpZ2h0PW5ldyBOdW1iZXIoKTsKKworLyoqCisgKiBQcm9wZXJ0eSB2aWRlb1dpZHRoCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIEhUTUxWaWRlb0VsZW1lbnQKKyAqLworSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUudmlkZW9XaWR0aD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgdmlkZW9IZWlnaHQKKyAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjAzMjkvbWVkaWEtZWxlbWVudHMuaHRtbAorICogQHR5cGUgTnVtYmVyCisgKiBAbWVtYmVyT2YgSFRNTFZpZGVvRWxlbWVudAorICovCitIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZS52aWRlb0hlaWdodD1uZXcgTnVtYmVyKCk7CisKKy8qKgorICogUHJvcGVydHkgcG9zdGVyCisgKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIwMzI5L21lZGlhLWVsZW1lbnRzLmh0bWwKKyAqIEB0eXBlIFN0cmluZworICogQG1lbWJlck9mIEhUTUxWaWRlb0VsZW1lbnQKKyAqLworSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUucG9zdGVyPW5ldyBTdHJpbmcoKTsKKwpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9zeXN0ZW0uanMgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUvbGlicmFyaWVzL3N5c3RlbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDY2ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy9zeXN0ZW0uanMKQEAgLTAsMCArMSwxNDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMC9SRUMtRE9NLUxldmVsLTItQ29yZS0yMDAwMTExMy9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKKyovCisKKy8qKgorICAqIE9iamVjdCBPYmplY3QoKQorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBPYmplY3QoKXt9OworIC8qKgorICAqIGZ1bmN0aW9uIHRvU3RyaW5nKCkgCisgICogQG1lbWJlck9mICAgT2JqZWN0CisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2VlICAgICBPYmplY3QKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiAiIjt9OworIC8qKgorICAqIGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkgCisgICogQG1lbWJlck9mICAgT2JqZWN0CisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2VlICAgICBPYmplY3QKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK09iamVjdC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiAiIjt9OworIC8qKgorICAqIGZ1bmN0aW9uIHZhbHVlT2YoKSAKKyAgKiBAbWVtYmVyT2YgICBPYmplY3QKKyAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAqIEBzZWUgICAgIE9iamVjdAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisgLyoqCisgICogZnVuY3Rpb24gaGFzT3duUHJvcGVydHkobmFtZSkgCisgICogQG1lbWJlck9mICAgT2JqZWN0CisgICogQHBhcmFtICAge1N0cmluZ30gbmFtZQorICAqIEByZXR1cm5zIHtCb29sZWFufQorICAqIEBzZWUgICAgIE9iamVjdAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUpe3JldHVybiB0cnVlO307CisgLyoqCisgICogZnVuY3Rpb24gaXNQcm90b3R5cGVPZihvKSAKKyAgKiBAbWVtYmVyT2YgICBPYmplY3QKKyAgKiBAcGFyYW0gICB7T2JqZWN0fSBvCisgICogQHJldHVybnMge0Jvb2xlYW59CisgICogQHNlZSAgICAgT2JqZWN0CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitPYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YgPSBmdW5jdGlvbihvKXtyZXR1cm4gdHJ1ZTt9OworIC8qKgorICAqIGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKG5hbWUpIAorICAqIEBtZW1iZXJPZiAgIE9iamVjdAorICAqIEBwYXJhbSAgIHtPYmplY3R9IG5hbWUKKyAgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAgKiBAc2VlICAgICBPYmplY3QKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbihuYW1lKXtyZXR1cm4gdHJ1ZTt9OworLyoqCisgICogUHJvcGVydHkgY29uc3RydWN0b3IKKyAgKiBAdHlwZSAgRnVuY3Rpb24KKyAgKiBAbWVtYmVyT2YgT2JqZWN0CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gCitPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbmV3IEZ1bmN0aW9uKCk7CisKKy8qKgorICAqIE9iamVjdCBTdHJpbmcoKQorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBleHRlbmRzIE9iamVjdAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBTdHJpbmcoKXt9CitTdHJpbmcucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworLyoqCisgICogc3RhdGljIGZ1bmN0aW9uIGZyb21DaGFyQ29kZShjaGFyQ29kZTEsIC4uLikKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0ge051bWJlcn0gY2hhckNvZGUKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzdGF0aWMKKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5mcm9tQ2hhckNvZGUgPSBmdW5jdGlvbihjaGFyQ29kZSl7cmV0dXJuICIiO307CisvKioKKyAgKiBQcm9wZXJ0eSBsZW5ndGgKKyAgKiBAdHlwZSAgICBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUubGVuZ3RoID0gMTsKKyAvKioKKyAgKiBmdW5jdGlvbiBjaGFyQXQocG9zaXRpb24pIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtOdW1iZXJ9IHBvc2l0aW9uCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuY2hhckF0ID0gZnVuY3Rpb24ocG9zaXRpb24pe3JldHVybiAiIjt9OworIC8qKgorICAqIGZ1bmN0aW9uIGNoYXJDb2RlQXQocG9zaXRpb24pIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtOdW1iZXJ9IHBvc2l0aW9uCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCA9IGZ1bmN0aW9uKHBvc2l0aW9uKXtyZXR1cm4gMDt9OworIC8qKgorICAqIGZ1bmN0aW9uIGNvbmNhdCh2YWx1ZTEsIC4uLikgCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiAiIjt9OworIC8qKgorICAqIGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoU3RyaW5nLCBzdGFydFBvc2l0aW9uKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7U3RyaW5nfSBzZWFyY2hTdHJpbmcKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBzdGFydFBvc2l0aW9uCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uKHNlYXJjaFN0cmluZywgc3RhcnRQb3NpdGlvbil7cmV0dXJuIDE7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hTdHJpbmcsIHN0YXJ0UG9zaXRpb24pIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtTdHJpbmd9IHNlYXJjaFN0cmluZworICAqIEBwYXJhbSAgIHtOdW1iZXJ9IHN0YXJ0UG9zaXRpb24KKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uKHNlYXJjaFN0cmluZywgc3RhcnRQb3NpdGlvbil7cmV0dXJuIDE7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBsb2NhbGVDb21wYXJlKG90aGVyU3RyaW5nKSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7U3RyaW5nfSBvdGhlclN0cmluZworICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmUgPSBmdW5jdGlvbihvdGhlclN0cmluZyl7cmV0dXJuIDA7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBtYXRjaChyZWdleHApIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtSZWdFeHB9IHJlZ2V4cAorICAqIEByZXR1cm5zIHtBcnJheX0KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihyZWdleHApe3JldHVybiBbXTt9OworIC8qKgorICAqIGZ1bmN0aW9uIHJlcGxhY2UocmVnZXhwLCByZXBsYWNlVmFsdWUpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtSZWdFeHB9IHJlZ2V4cAorICAqIEBwYXJhbSAgIHtTdHJpbmd9IHJlcGxhY2VWYWx1ZQorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbihyZWdleHAsIHJlcGxhY2VWYWx1ZSl7cmV0dXJuICIiO307CisgLyoqCisgICogZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkgCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtICAge1JlZ0V4cH0gcmVnZXhwCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24ocmVnZXhwKXtyZXR1cm4gMTt9OworIC8qKgorICAqIGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEBwYXJhbSAgIHtOdW1iZXJ9IHN0YXJ0CisgICogQHBhcmFtICAge051bWJlcn0gZW5kCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbihzdGFydCwgZW5kKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSAKKyAgKiBAbWVtYmVyT2YgICBTdHJpbmcKKyAgKiBAcGFyYW0gICB7U3RyaW5nfSBzZXBhcmF0b3IKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBsaW1pdAorICAqIEByZXR1cm5zIHtBcnJheX0KKyAgKiBAc2VlICAgICBTdHJpbmcKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK1N0cmluZy5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbihzZXBhcmF0b3IsIGxpbWl0KXtyZXR1cm4gW107fTsKKyAvKioKKyAgKiBmdW5jdGlvbiBzdWJzdHJpbmcoc3RhcnQsIGVuZCkgCisgICogQG1lbWJlck9mICAgU3RyaW5nCisgICogQHBhcmFtICAge051bWJlcn0gc3RhcnQKKyAgKiBAcGFyYW0gICB7TnVtYmVyfSBlbmQKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzZWUgICAgIFN0cmluZworICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorU3RyaW5nLnByb3RvdHlwZS5zdWJzdHJpbmcgPSBmdW5jdGlvbihzdGFydCwgZW5kKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB0b0xvd2VyQ2FzZSgpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB0b0xvY2FsZUxvd2VyQ2FzZSgpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnRvTG9jYWxlTG93ZXJDYXNlID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB0b1VwcGVyQ2FzZSgpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlPSBmdW5jdGlvbiAoKXtyZXR1cm4gIiI7fTsKKyAvKioKKyAgKiBmdW5jdGlvbiB0b0xvY2FsZVVwcGVyQ2FzZSgpIAorICAqIEBtZW1iZXJPZiAgIFN0cmluZworICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNlZSAgICAgU3RyaW5nCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitTdHJpbmcucHJvdG90eXBlLnRvTG9jYWxlVXBwZXJDYXNlID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKworLyoqCisgICogT2JqZWN0IE51bWJlcigpCisgICogQGNvbnN0cnVjdG9yCisgICogQGV4dGVuZHMgT2JqZWN0CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK2Z1bmN0aW9uIE51bWJlcigpe30KK051bWJlci5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAgKiBwcm9wZXJ0eSBNSU5fVkFMVUUKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgTnVtYmVyCisgICogQHN0YXRpYworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitOdW1iZXIuTUlOX1ZBTFVFID0gMDsKKy8qKgorICAqIHByb3BlcnR5IE1BWF9WQUxVRQorICAqIEB0eXBlIE51bWJlcgorICAqIEBtZW1iZXJPZiBOdW1iZXIKKyAgKiBAc3RhdGljCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK051bWJlci5NQVhfVkFMVUUgPSAwIDsKKy8qKgorICAqIHByb3BlcnR5IE5hTgorICAqIEB0eXBlIE51bWJlcgorICAqIEBtZW1iZXJPZiBOdW1iZXIKKyAgKiBAc3RhdGljCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK051bWJlci5OYU4gPSAwOworLyoqCisgICogcHJvcGVydHkgTkVHQVRJVkVfSU5GSU5JVFkKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgTnVtYmVyCisgICogQHN0YXRpYworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID0gMDsKKy8qKgorICAqIHByb3BlcnR5IFBPU0lUSVZFX0lORklOSVRZCisgICogQHR5cGUgTnVtYmVyCisgICogQG1lbWJlck9mIE51bWJlcgorICAqIEBzdGF0aWMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK051bWJlci5QT1NJVElWRV9JTkZJTklUWSA9IDA7CisvKioKKyAgKiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKQorICAqIEBtZW1iZXJPZiBOdW1iZXIKKyAgKiBAcGFyYW0ge051bWJlcn0gZnJhY3Rpb25EaWdpdHMKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitOdW1iZXIucHJvdG90eXBlLnRvRml4ZWQgPSBmdW5jdGlvbihmcmFjdGlvbkRpZ2l0cyl7cmV0dXJuICIiO307CisvKioKKyAqIGZ1bmN0aW9uIHRvRXhwb25lbnRpYWwoZnJhY3Rpb25EaWdpdHMpCisgKiBAbWVtYmVyT2YgTnVtYmVyCisgKiBAcGFyYW0ge051bWJlcn0gZnJhY3Rpb25EaWdpdHMKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorKi8KK051bWJlci5wcm90b3R5cGUudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uKGZyYWN0aW9uRGlnaXRzKXtyZXR1cm4gIiI7fTsKKy8qKgorICogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKQorICogQG1lbWJlck9mIE51bWJlcgorICogQHBhcmFtIHtOdW1iZXJ9IGZyYWN0aW9uRGlnaXRzCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyovCitOdW1iZXIucHJvdG90eXBlLnRvUHJlY2lzaW9uID0gZnVuY3Rpb24oZnJhY3Rpb25EaWdpdHMpe3JldHVybiAiIjt9OworCisvKioKKyAqIE9iamVjdCBCb29sZWFuKCkKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMgT2JqZWN0CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyovCitmdW5jdGlvbiBCb29sZWFuKCl7fTsKK0Jvb2xlYW4ucHJvdG90eXBlID0gbmV3IE9iamVjdCgpOworCisvKioKKyAgKiBPYmplY3QgQXJyYXkoKQorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBleHRlbmRzIE9iamVjdAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBBcnJheSgpe307CitBcnJheS5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAgKiBQcm9wZXJ0eSBsZW5ndGgKKyAgKiBAdHlwZSAgICBOdW1iZXIKKyAgKiBAbWVtYmVyT2YgICBBcnJheQorICAqIEBzZWUgICAgIEFycmF5CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitBcnJheS5wcm90b3R5cGUubGVuZ3RoID0gMTsKKy8qKgorICAqIGZ1bmN0aW9uIGNvbmNhdChhcmdzKQorICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MKKyAgKiBAcmV0dXJucyB7QXJyYXl9CisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8gIAorQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBbXTt9OworLyoqCisgICogZnVuY3Rpb24gam9pbihzZXBlcmF0b3IpCisgICogQHBhcmFtIHtTdHJpbmd9IHNlcGVyYXRvcgorICAqIEByZXR1cm5zIHtBcnJheX0KKyAgKiBAbWVtYmVyT2YgICBBcnJheQorICAqIEBzZWUgICAgIEFycmF5CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAgCitBcnJheS5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uKHNlcGVyYXRvcil7cmV0dXJuIFtdO307CisvKioKKyAgKiBmdW5jdGlvbiBwb3AoKQorICAqIEByZXR1cm5zIHtPYmplY3R9CisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovICAKK0FycmF5LnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpe3JldHVybiBuZXcgT2JqZWN0KCk7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHB1c2goYXJncykKKyAgKiBAcGFyYW0ge0FycmF5fSBhcmdzCisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8gIAorQXJyYXkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihhcmdzKXt9OworLyoqCisgICogZnVuY3Rpb24gcmV2ZXJzZSgpCisgICogQHJldHVybnMge0FycmF5fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK0FycmF5LnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24oKXtyZXR1cm4gW107fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNoaWZ0KCkKKyAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8gIAorQXJyYXkucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisvKioKKyAgKiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKQorICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydAorICAqIEBwYXJhbSB7TnVtYmVyfSBlbmQKKyAgKiBAcmV0dXJucyB7QXJyYXl9CisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgCisgKi8gIAorQXJyYXkucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCl7cmV0dXJuIFtdO307CisvKioKKyAgKiBmdW5jdGlvbiBzb3J0KGZ1bmN0KQorICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0CisgICogQHJldHVybnMge0FycmF5fQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovICAKK0FycmF5LnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24oZnVuY3Qpe3JldHVybiBbXTt9OworLyoqCisgICogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVjb3VudCwgaXRlbXMpCisgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0CisgICogQHBhcmFtIHtOdW1iZXJ9IGRlbGV0ZWNvdW50CisgICogQHBhcmFtIHtBcnJheX0gaXRlbXMKKyAgKiBAcmV0dXJucyB7QXJyYXl9CisgICogQG1lbWJlck9mICAgQXJyYXkKKyAgKiBAc2VlICAgICBBcnJheQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLyAgCitBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGRlbGV0ZWNvdW50LCBpdGVtcyl7cmV0dXJuIFtdO307CisvKioKKyAgKiBmdW5jdGlvbiB1bnNoaWZ0KGl0ZW1zKQorICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBtZW1iZXJPZiAgIEFycmF5CisgICogQHNlZSAgICAgQXJyYXkKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovICAKK0FycmF5LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24odmFsdWVzKXtyZXR1cm4gMTt9OworCisvKioKKyAgKiBPYmplY3QgRnVuY3Rpb24oKQorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBleHRlbmRzIE9iamVjdAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBGdW5jdGlvbigpe307CitGdW5jdGlvbi5wcm90b3R5cGUgPSBuZXcgT2JqZWN0KCk7CisvKioKKyAqIGZ1bmN0aW9uIGFwcGx5ICh0aGlzT2JqZWN0LCBhcmdBcnJheSkKKyAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzT2JqZWN0CisgKiBAcGFyYW0ge0FycmF5fSBhcmdBcnJheQorICogQHJldHVybnMge09iamVjdH0KKyAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLyAKK0Z1bmN0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGFyZ0FycmF5KXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisvKioKKyAgKiBmdW5jdGlvbiBjYWxsICh0aGlzT2JqZWN0LCBhcmdzKQorICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzT2JqZWN0CisgICogQHBhcmFtIHtPYmplY3R9IGFyZ3MKKyAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovIAorRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbih0aGlzT2JqZWN0LCBhcmdzKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisvKioKKyAgKiBwcm9wZXJ0eSBsZW5ndGgKKyAgKiBAdHlwZSAgICBOdW1iZXIKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLyAKK0Z1bmN0aW9uLnByb3RvdHlwZS5sZW5ndGggPSAwOworCisvKioKKyAgKiBPYmplY3QgRGF0ZShzKQorICAqIEBjb25zdHJ1Y3RvcgorICAqIEBwYXJhbSB7U3RyaW5nfSBzCisgICogQGV4dGVuZHMgT2JqZWN0CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitmdW5jdGlvbiBEYXRlKHMpe307CitEYXRlLnByb3RvdHlwZSA9IG5ldyBPYmplY3QoKTsKKy8qKgorICogZnVuY3Rpb24gVVRDKGhvdXIsIG1pbiwgc2VjLCBtcykKKyAqIEBtZW1iZXJPZiBEYXRlCisgKiBAcGFyYW0ge051bWJlcn0gaG91cgorICogQHBhcmFtIHtOdW1iZXJ9IG1pbgorICogQHBhcmFtIHtOdW1iZXJ9IHNlYworICogQHBhcmFtIHtOdW1iZXJ9IG1zICAKKyAqIEByZXR1cm5zIHtOdW1iZXJ9CisgKiBAc3RhdGljCisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorKi8KK0RhdGUuVVRDID0gZnVuY3Rpb24oaG91ciwgbWluLCBzZWMsIG1zKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gcGFyc2Uoc3RyaW5nKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZworICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHN0YXRpYworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnBhcnNlID0gZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gdG9EYXRlU3RyaW5nKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnRvRGF0ZVN0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisvKioKKyAgKiBmdW5jdGlvbiB0b1RpbWVTdHJpbmcoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUudG9UaW1lU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitEYXRlLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisvKioKKyAgKiBmdW5jdGlvbiB0b0xvY2FsZURhdGVTdHJpbmcoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge1N0cmluZ30KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUudG9Mb2NhbGVEYXRlU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHRvTG9jYWxlVGltZVN0cmluZygpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7U3RyaW5nfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS50b0xvY2FsZVRpbWVTdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiAiIjt9OworLyoqCisgICogZnVuY3Rpb24gdmFsdWVPZigpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRGdWxsWWVhcigpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRGdWxsWWVhciA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFRpbWUoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovCitEYXRlLnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDRnVsbFllYXIoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFVUQ0Z1bGxZZWFyID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0TW9udGgoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0TW9udGggPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRVVENNb250aCgpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5nZXRVVENNb250aCA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldERhdGUoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFVUQ0RhdGUoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0VVRDRGF0ZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldERheSgpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0RGF5ID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDRGF5KCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgICAgIAorICovCitEYXRlLnByb3RvdHlwZS5nZXRVVENEYXk9ZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0SG91cnMoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK0RhdGUucHJvdG90eXBlLmdldEhvdXJzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDSG91cnMoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0VVRDSG91cnMgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRNaW51dGVzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldE1pbnV0ZXMgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRVVENNaW51dGVzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFVUQ01pbnV0ZXMgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRTZWNvbmRzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFNlY29uZHMgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRVVENTZWNvbmRzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFVUQ1NlY29uZHMgPSBmdW5jdGlvbigpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuZ2V0TWlsbGlzZWNvbmRzID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZ2V0VVRDTWlsbGlzZWNvbmRzKCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFVUQ01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uKCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KCkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLmdldFRpbWV6b25lT2Zmc2V0ID0gZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2V0VGltZSh2YWx1ZSkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIDA7fTsKKworLyoqCisgICogZnVuY3Rpb24gc2V0TWlsbGlzZWNvbmRzKHZhbHVlKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0TWlsbGlzZWNvbmRzID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRVVENNaWxsaXNlY29uZHMobXMpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBtcworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENNaWxsaXNlY29uZHMgPSBmdW5jdGlvbihtcyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldFNlY29uZHMoc2VjLG1zKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gc2VjCisgICogQHBhcmFtIHtOdW1iZXJ9IG1zCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldFNlY29uZHMgPSBmdW5jdGlvbihzZWMsbXMpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRVVENTZWNvbmRzKHNlYyxtcykKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IHNlYworICAqIEBwYXJhbSB7TnVtYmVyfSBtcworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENTZWNvbmRzPWZ1bmN0aW9uKHNlYyxtcyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldE1pbnV0ZXMobWluLHNlYyxtcykKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IG1pbgorICAqIEBwYXJhbSB7TnVtYmVyfSBzZWMKKyAgKiBAcGFyYW0ge051bWJlcn0gbXMKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworRGF0ZS5wcm90b3R5cGUuc2V0TWludXRlcz1mdW5jdGlvbihtaW4sc2VjLG1zKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2V0VVRDTWludXRlKG1pbixzZWMsbXMpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBtaW4KKyAgKiBAcGFyYW0ge051bWJlcn0gc2VjCisgICogQHBhcmFtIHtOdW1iZXJ9IG1zCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldFVUQ01pbnV0ZSA9IGZ1bmN0aW9uKG1pbixzZWMsbXMpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzZXRIb3Vycyhob3VyLCBtaW4sc2VjLG1zKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gaG91cgorICAqIEBwYXJhbSB7TnVtYmVyfSBtaW4KKyAgKiBAcGFyYW0ge051bWJlcn0gc2VjCisgICogQHBhcmFtIHtOdW1iZXJ9IG1zCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldEhvdXJzID0gZnVuY3Rpb24oaG91cixtaW4sc2VjLG1zKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gc2V0VVRDSG91cnMoaG91ciwgbWluLHNlYyxtcykKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IGhvdXIKKyAgKiBAcGFyYW0ge051bWJlcn0gbWluCisgICogQHBhcmFtIHtOdW1iZXJ9IHNlYworICAqIEBwYXJhbSB7TnVtYmVyfSBtcworICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENIb3VycyA9IGZ1bmN0aW9uKGhvdXIsbWluLHNlYyxtcyl7cmV0dXJuIDA7fTsKKworLyoqCisgICogZnVuY3Rpb24gc2V0RGF0ZShkYXRlKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gZGF0ZQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXREYXRlID0gZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIDA7fTsKKworLyoqCisgICogZnVuY3Rpb24gc2V0VVRDRGF0ZShkYXRlKQorICAqIEBtZW1iZXJPZiBEYXRlCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAcGFyYW0ge051bWJlcn0gZGF0ZQorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitEYXRlLnByb3RvdHlwZS5zZXRVVENEYXRlID0gZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIDA7fTsKKworLyoqCisgICogZnVuY3Rpb24gc2V0TW9udGgobW9udGgsZGF0ZSkKKyAgKiBAbWVtYmVyT2YgRGF0ZQorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHBhcmFtIHtOdW1iZXJ9IGRhdGUKKyAgKiBAcGFyYW0ge051bWJlcn0gbW9udGgKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK0RhdGUucHJvdG90eXBlLnNldE1vbnRoID0gZnVuY3Rpb24obW9udGgsZGF0ZSl7cmV0dXJuIDE7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldFVUQ01vbnRoKG1vbnRoLGRhdGUpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBkYXRlCisgICogQHBhcmFtIHtOdW1iZXJ9IG1vbnRoCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldFVUQ01vbnRoID0gZnVuY3Rpb24obW9udGgsZGF0ZSl7cmV0dXJuIDE7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldEZ1bGxZZWFyKG1vbnRoLGRhdGUpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBwYXJhbSB7TnVtYmVyfSBkYXRlCisgICogQHBhcmFtIHtOdW1iZXJ9IG1vbnRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHllYXIKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK0RhdGUucHJvdG90eXBlLnNldEZ1bGxZZWFyID0gZnVuY3Rpb24oeWVhciwgbW9udGgsZGF0ZSl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNldFVUQ0Z1bGxZZWFyKG1vbnRoLGRhdGUpCisgICogQG1lbWJlck9mIERhdGUKKyAgKiBAcmV0dXJucyB7RGF0ZX0KKyAgKiBAcGFyYW0ge051bWJlcn0gZGF0ZQorICAqIEBwYXJhbSB7TnVtYmVyfSBtb250aAorICAqIEBwYXJhbSB7TnVtYmVyfSB5ZWFyCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK0RhdGUucHJvdG90eXBlLnNldFVUQ0Z1bGxZZWFyID0gZnVuY3Rpb24oeWVhciwgbW9udGgsZGF0ZSl7fTsKKy8qKgorICogZnVuY3Rpb24gdG9VVENTdHJpbmcoKQorICogQG1lbWJlck9mIERhdGUKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorKi8KK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gIiI7fTsKKworLyoqCisgICogUHJvcGVydHkgTmFOCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovCit2YXIgTmFOPTA7CisvKioKKyAgKiBQcm9wZXJ0eSBJbmZpbml0eQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLwordmFyIEluZmluaXR5PTA7CisvKioKKyAgKiBmdW5jdGlvbiBldmFsKHMpCisgICogQHBhcmFtIHtTdHJpbmd9IHMKKyAgKiBAdHlwZSBPYmplY3QKKyAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLworZnVuY3Rpb24gZXZhbChzKXtyZXR1cm4gbmV3IE9iamVjdCgpO307CisKKy8vQEdJTk86IEJ1ZyAxOTc5ODcgKFRlbXAgRml4KQorLyoqCisgICogUHJvcGVydHkgZGVidWdnZXIKKyAgKiBAZGVzY3JpcHRpb24gRGVidWdnZXIga2V5d29yZAorICovCit2YXIgZGVidWdnZXI9bnVsbDsKKworLyoqCisgKiBQcm9wZXJ0eSB1bmRlZmluZWQKKyAqIEBkZXNjcmlwdGlvbiB1bmRlZmluZWQKKyovCit2YXIgdW5kZWZpbmVkPW51bGw7CisKKy8qKgorICAqIGZ1bmN0aW9uIHBhcnNlSW50KHMscmFkaXgpCisgICogQHBhcmFtIHtTdHJpbmd9IHMKKyAgKiBAcGFyYW0ge051bWJlcn0gcmFkaXgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitmdW5jdGlvbiBwYXJzZUludChzLHJhZGl4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gcGFyc2VGbG9hdChzKQorICAqIEBwYXJhbSB7U3RyaW5nfSBzCisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitmdW5jdGlvbiBwYXJzZUZsb2F0KHMpe3JldHVybiAwO307CisvKioKKyAqIGZ1bmN0aW9uIGVzY2FwZShzKQorICogQHBhcmFtIHtTdHJpbmd9IHMKKyAqIEB0eXBlIFN0cmluZworICogQHJldHVybnMge1N0cmluZ30KKyAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAKKyovCitmdW5jdGlvbiBlc2NhcGUocyl7cmV0dXJuICIiO307CisvKioKKyAqIGZ1bmN0aW9uIHVuZXNjYXBlKHMpCisgKiBAcGFyYW0ge1N0cmluZ30gcworICogQHR5cGUgU3RyaW5nCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorKi8KK2Z1bmN0aW9uIHVuZXNjYXBlKHMpe3JldHVybiAiIjt9OworLyoqCisgICogZnVuY3Rpb24gaXNOYU4obnVtYmVyKQorICAqIEBwYXJhbSB7U3RyaW5nfSBudW1iZXIKKyAgKiBAdHlwZSBCb29sZWFuCisgICogQHJldHVybnMge0Jvb2xlYW59CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovCitmdW5jdGlvbiBpc05hTihudW1iZXIpe3JldHVybiBmYWxzZTt9OworLyoqCisgICogZnVuY3Rpb24gaXNGaW5pdGUobnVtYmVyKQorICAqIEBwYXJhbSB7U3RyaW5nfSBudW1iZXIKKyAgKiBAdHlwZSBCb29sZWFuCisgICogQHJldHVybnMge0Jvb2xlYW59CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK2Z1bmN0aW9uIGlzRmluaXRlKG51bWJlcil7cmV0dXJuIGZhbHNlO307CisvKioKKyAqIGZ1bmN0aW9uIGRlY29kZVVSSShlbmNvZGVkVVJJKQorICogQHBhcmFtIHtTdHJpbmd9IGVuY29kZWRVUkkKKyAqIEB0eXBlIFN0cmluZworICogQHJldHVybnMge1N0cmluZ30KKyAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorKi8KK2Z1bmN0aW9uIGRlY29kZVVSSShlbmNvZGVkVVJJKXtyZXR1cm4gIiI7fTsKKy8qKgorICogQHBhcmFtIHtTdHJpbmd9IHVyaUNvbXBvbmVudAorICogQHR5cGUgU3RyaW5nCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisqLworZnVuY3Rpb24gZGVjb2RlVVJJQ29tcG9uZW50KHVyaUNvbXBvbmVudCl7cmV0dXJuICIiO307CisvKioKKyAqIGZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudCh1cmlDb21wb25lbnQpCisgKiBAcGFyYW0ge1N0cmluZ30gdXJpQ29tcG9uZW50CisgKiBAdHlwZSBTdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorKi8KK2Z1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudCh1cmlDb21wb25lbnQpe3JldHVybiAiIjt9OworCisvKioKKyAqIGZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudChVUkkpCisgKiBAcGFyYW0ge1N0cmluZ30gVVJJCisgKiBAdHlwZSBTdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorKi8KK2Z1bmN0aW9uIGVuY29kZVVSSShVUkkpe3JldHVybiAiIjt9OworCisvKioKKyAgKiBPYmplY3QgTWF0aChccykKKyAgKiBAc3VwZXIgT2JqZWN0CisgICogQGNvbnN0cnVjdG9yCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAgICAgCisgKi8KK2Z1bmN0aW9uIE1hdGgoKXt9OworTWF0aC5wcm90b3R5cGU9bmV3IE9iamVjdCgpOworLyoqCisgICogUHJvcGVydHkgRQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGguRT0wOworLyoqCisgICogUHJvcGVydHkgTE4xMAorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGguTE4xMD0wOworLyoqCisgICogUHJvcGVydHkgTE4yCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitNYXRoLkxOMj0wOworLyoqCisgICogUHJvcGVydHkgTE9HMkUKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgIAorICovCitNYXRoLkxPRzJFPTA7CisvKioKKyAgKiBQcm9wZXJ0eSBMT0cxMEUKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitNYXRoLkxPRzEwRT0wOworLyoqCisgICogUHJvcGVydHkgUEkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworTWF0aC5QST0wOworLyoqCisgICogUHJvcGVydHkgU1FSVDFfMgorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGguU1FSVDFfMj0wOworLyoqCisgICogUHJvcGVydHkgU1FSVDIKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitNYXRoLlNRUlQyPTA7CisvKioKKyAgKiBmdW5jdGlvbiBhYnMoeCkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8KK01hdGguYWJzPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBhY29zKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworTWF0aC5hY29zPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBhc2luKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovCitNYXRoLmFzaW49ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGF0YW4oeCkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitNYXRoLmF0YW49ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIGF0YW4yKHgseSkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHBhcmFtIHtOdW1iZXJ9IHkKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworTWF0aC5hdGFuMj1mdW5jdGlvbih4LHkpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBjZWlsKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGguY2VpbD1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gY29zKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gIAorICovCitNYXRoLmNvcz1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gZXhwKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK01hdGguZXhwPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBmbG9vcih4KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworTWF0aC5mbG9vcj1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gbG9nKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGgubG9nPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBtYXgoYXJnKQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IGFyZ3MKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAKKyAqLworTWF0aC5tYXg9ZnVuY3Rpb24oYXJncyl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIG1pbihhcmcpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0gYXJncworICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGgubWluPWZ1bmN0aW9uKGFyZ3Mpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBwb3coeCx5KQorICAqIEBtZW1iZXJPZiBNYXRoCisgICogQHBhcmFtIHtOdW1iZXJ9IHgKKyAgKiBAcGFyYW0ge051bWJlcn0geQorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGgucG93PWZ1bmN0aW9uKHgseSl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHBvdygpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAdHlwZSBOdW1iZXIKKyAgKiBAcmV0dXJucyB7TnVtYmVyfQorICAqIEBzaW5jZSAgIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbiAKKyAgKiBAc2luY2UgICBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uICAgICAKKyAqLworTWF0aC5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gcm91bmQoeCkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgIAorICovCitNYXRoLnJvdW5kPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBmdW5jdGlvbiBzaW4oeCkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAKKyAqLworTWF0aC5zaW49ZnVuY3Rpb24oeCl7cmV0dXJuIDA7fTsKKy8qKgorICAqIGZ1bmN0aW9uIHNxcnQoeCkKKyAgKiBAbWVtYmVyT2YgTWF0aAorICAqIEBwYXJhbSB7TnVtYmVyfSB4CisgICogQHR5cGUgTnVtYmVyCisgICogQHJldHVybnMge051bWJlcn0KKyAgKiBAc2luY2UgICBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24gCisgICogQHNpbmNlICAgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgICAgCisgKi8KK01hdGguc3FydD1mdW5jdGlvbih4KXtyZXR1cm4gMDt9OworLyoqCisgICogZnVuY3Rpb24gdGFuKHgpCisgICogQG1lbWJlck9mIE1hdGgKKyAgKiBAcGFyYW0ge051bWJlcn0geAorICAqIEB0eXBlIE51bWJlcgorICAqIEByZXR1cm5zIHtOdW1iZXJ9CisgICogQHNpbmNlICAgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uIAorICAqIEBzaW5jZSAgIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gICAgCisgKi8KK01hdGgudGFuPWZ1bmN0aW9uKHgpe3JldHVybiAwO307CisvKioKKyAgKiBPYmplY3QgUmVnRXhwKCkKKyAgKiBAc3VwZXIgT2JqZWN0CisgICogQGNvbnN0cnVjdG9yCisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBSZWdFeHAoKXt9OworUmVnRXhwLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisvKioKKyAgKiBmdW5jdGlvbiBleGVjKHN0cmluZykKKyAgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nCisgICogQHJldHVybnMge0FycmF5fQorICAqIEB0eXBlIEFycmF5CisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitSZWdFeHAucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gW107fTsKKy8qKgorICAqIGZ1bmN0aW9uIHRlc3Qoc3RyaW5nKQorICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcKKyAgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAgKiBAdHlwZSBCb29sZWFuCisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAgCisgKi8KK1JlZ0V4cC5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihzdHJpbmcpe3JldHVybiBmYWxzZTt9OworLyoqCisgICogcHJvcGVydHkgc291cmNlCisgICogQHR5cGUgU3RyaW5nCisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworUmVnRXhwLnByb3RvdHlwZS5zb3VyY2U9IiI7CisvKioKKyAgKiBwcm9wZXJ0eSBnbG9iYWwKKyAgKiBAdHlwZSBCb29sZWFuCisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitSZWdFeHAucHJvdG90eXBlLmdsb2JhbD1mYWxzZTsKKworLyoqCisgICogcHJvcGVydHkgaWdub3JlQ2FzZQorICAqIEB0eXBlIEJvb2xlYW4KKyAgKiBAbWVtYmVyT2YgUmVnRXhwCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitSZWdFeHAucHJvdG90eXBlLmlnbm9yZUNhc2U9ZmFsc2U7CisvKioKKyAgKiBwcm9wZXJ0eSBtdWx0aWxpbmUKKyAgKiBAdHlwZSBCb29sZWFuCisgICogQG1lbWJlck9mIFJlZ0V4cAorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitSZWdFeHAucHJvdG90eXBlLm11bHRpbGluZT1mYWxzZTsKKy8qKgorICAqIHByb3BlcnR5IGxhc3RJbmRleAorICAqIEB0eXBlIE51bWJlcgorICAqIEBtZW1iZXJPZiBSZWdFeHAKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4KKyAqLworUmVnRXhwLnByb3RvdHlwZS5sYXN0SW5kZXg9MDsKKy8qKgorICAqIE9iamVjdCBFcnJvcihtZXNzYWdlKQorICAqIEBzdXBlciBPYmplY3QKKyAgKiBAY29uc3RydWN0b3IKKyAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZQorICAqIEBtZW1iZXJPZiBFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLiAKKyAqLworZnVuY3Rpb24gRXJyb3IobWVzc2FnZSl7fTsKK0Vycm9yLnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CisvKioKKyAgKiBwcm9wZXJ0eSBuYW1lCisgICogQHR5cGUgU3RyaW5nCisgICogQG1lbWJlck9mIEVycm9yCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uIAorICovCitFcnJvci5wcm90b3R5cGUubmFtZT0iIjsKKy8qKgorICAqIHByb3BlcnR5IG1lc3NhZ2UKKyAgKiBAdHlwZSBTdHJpbmcKKyAgKiBAbWVtYmVyT2YgRXJyb3IKKyAgKiBAc2luY2UgU3RhbmRhcmQgRUNNQS0yNjIgM3JkLiBFZGl0aW9uCisgICogQHNpbmNlIExldmVsIDIgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIENvcmUgRGVmaW5pdGlvbi4gCisgKi8KK0Vycm9yLnByb3RvdHlwZS5tZXNzYWdlPSIiOworLyoqCisgICogT2JqZWN0IEV2YWxFcnJvcigpCisgICogQHN1cGVyIEVycm9yCisgICogQGNvbnN0cnVjdG9yCisgICoKKyAgKiBAbWVtYmVyT2YgRXZhbEVycm9yCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK2Z1bmN0aW9uIEV2YWxFcnJvcigpe307CitFdmFsRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcigiIik7CisvKioKKyAgKiBPYmplY3QgUmFuZ2VFcnJvcigpCisgICogQHN1cGVyIEVycm9yCisgICogQGNvbnN0cnVjdG9yCisgICoKKyAgKiBAbWVtYmVyT2YgUmFuZ2VFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBSYW5nZUVycm9yKCl7fTsKK1JhbmdlRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcigiIik7CisvKioKKyAgKiBPYmplY3QgUmVmZXJlbmNlRXJyb3IoKQorICAqIEBzdXBlciBFcnJvcgorICAqIEBjb25zdHJ1Y3RvcgorICAqCisgICogQG1lbWJlck9mIFJlZmVyZW5jZUVycm9yCisgICogQHNpbmNlIFN0YW5kYXJkIEVDTUEtMjYyIDNyZC4gRWRpdGlvbgorICAqIEBzaW5jZSBMZXZlbCAyIERvY3VtZW50IE9iamVjdCBNb2RlbCBDb3JlIERlZmluaXRpb24uCisgKi8KK2Z1bmN0aW9uIFJlZmVyZW5jZUVycm9yKCl7fTsKK1JlZmVyZW5jZUVycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IoIiIpOworLyoqCisgICogT2JqZWN0IFN5bnRheEVycm9yKCkKKyAgKiBAc3VwZXIgRXJyb3IKKyAgKiBAY29uc3RydWN0b3IKKyAgKgorICAqIEBtZW1iZXJPZiBTeW50YXhFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBTeW50YXhFcnJvcigpe307CitTeW50YXhFcnJvci5wcm90b3R5cGU9bmV3IEVycm9yKCIiKTsKKy8qKgorICAqIE9iamVjdCBUeXBlRXJyb3IoKQorICAqIEBzdXBlciBFcnJvcgorICAqIEBjb25zdHJ1Y3RvcgorICAqCisgICogQG1lbWJlck9mIFR5cGVFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBUeXBlRXJyb3IoKXt9OworVHlwZUVycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IoIiIpOworLyoqCisgICogT2JqZWN0IFVSSUVycm9yKCkKKyAgKiBAc3VwZXIgRXJyb3IKKyAgKiBAY29uc3RydWN0b3IKKyAgKgorICAqIEBtZW1iZXJPZiBVUklFcnJvcgorICAqIEBzaW5jZSBTdGFuZGFyZCBFQ01BLTI2MiAzcmQuIEVkaXRpb24KKyAgKiBAc2luY2UgTGV2ZWwgMiBEb2N1bWVudCBPYmplY3QgTW9kZWwgQ29yZSBEZWZpbml0aW9uLgorICovCitmdW5jdGlvbiBVUklFcnJvcigpe307CitVUklFcnJvci5wcm90b3R5cGU9bmV3IEVycm9yKCIiKTsKKworLy9zdXBwb3J0IGZvciBkZWJ1Z2dlciBrZXl3b3JkCit2YXIgZGVidWdnZXIgPSBudWxsOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMveGhyLmpzIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL2xpYnJhcmllcy94aHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2YzAxMQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS9saWJyYXJpZXMveGhyLmpzCkBAIC0wLDAgKzEsMTA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9YTUxIdHRwUmVxdWVzdAorICogYW5kIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzMwNjIuYXNweAorICoqLworCisvKioKKyogZnVuY3Rpb24gY3JlYXRlUmVxdWVzdAorKiBAdHlwZSBYTUxIdHRwUmVxdWVzdAorKiBAbWVtYmVyT2YgV2luZG93CisqLworV2luZG93LnByb3RvdHlwZS5jcmVhdGVSZXF1ZXN0PSBmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTt9OworLyoqCisqIE9iamVjdCBYTUxIdHRwUmVxdWVzdAorKiBAdHlwZSBjb25zdHJ1Y3RvcgorKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZT1uZXcgT2JqZWN0KCk7CitmdW5jdGlvbiBYTUxIdHRwUmVxdWVzdCgpe307CisKKy8qKgorICogZnVuY3Rpb24gb25yZWFkeXN0YXRlY2hhbmdlCisgKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyAqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe307CisvKioKKyAqIHByb3BlcnR5IHJlYWR5U3RhdGUKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisgKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5yZWFkeVN0YXRlPTA7CisvKioKKyAqIHByb3BlcnR5IHJlc3BvbnNlVGV4dAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyAqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnJlc3BvbnNlVGV4dD0iIjsKKy8qKgorICogcHJvcGVydHkgcmVzcG9uc2VYTUwKKyAqIEB0eXBlIERvY3VtZW50CisgKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyAqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnJlc3BvbnNlWE1MPW5ldyBEb2N1bWVudCgpOworLyoqCisgKiBwcm9wZXJ0eSBzdGF0dXMKKyAqIEB0eXBlIE51bWJlcgorICogQG1lbWJlck9mIFhNTEh0dHBSZXF1ZXN0CisgKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zdGF0dXM9MDsKKy8qKgorICogcHJvcGVydHkgc3RhdHVzVGV4dAorICogQHR5cGUgU3RyaW5nCisgKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyAqLworWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnN0YXR1c1RleHQ9IiI7CisvKioKKyAqIGZ1bmN0aW9uIGFib3J0KCkKKyAqIEBtZW1iZXJPZiBYTUxIdHRwUmVxdWVzdAorICovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oKXt9OworLyoqCisqIGZ1bmN0aW9uIGdldEFsbFJlc3BvbnNlSGVhZGVycygpCisqIEB0eXBlIFN0cmluZworKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuICIiO307CisvKioKKyogZnVuY3Rpb24gb3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXJuYW1lLCBwYXNzd29yZCkKKyogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZAorKiBAcGFyYW0ge1N0cmluZ30gdXJsCisqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9uYWwgYXN5bmMKKyogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbmFsIHVzZXJuYW1lCisqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25hbCBwYXNzd29yZAorKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXJuYW1lLCBwYXNzd29yZCl7fTsKKy8qKgorKiBmdW5jdGlvbiBzZW5kKGJvZHkpCisqIEBwYXJhbSB7T2JqZWN0fSBib2R5CisqIEBtZW1iZXJPZiBYTUxIdHRwUmVxdWVzdAorKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGJvZHkpe307CisvKioKKyogZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsdmFsdWUpCisqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXIKKyogQHBhcmFtIHtTdHJpbmd9IHZhbHVlCisqIEBtZW1iZXJPZiBYTUxIdHRwUmVxdWVzdAorKi8KK1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXF1ZXN0SGVhZGVyPWZ1bmN0aW9uKGhlYWRlcix2YWx1ZSl7fTsKKy8qKgorKiBmdW5jdGlvbiBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKQorKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVyCisqIEB0eXBlIFN0cmluZworKiBAbWVtYmVyT2YgWE1MSHR0cFJlcXVlc3QKKyovCitYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oaGVhZGVyKXtyZXR1cm4gIiI7fTsKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS92YXJpYWJsZXNBbmRDb250YWluZXJzLmRhdCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS92YXJpYWJsZXNBbmRDb250YWluZXJzLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAwNjZhCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlL3ZhcmlhYmxlc0FuZENvbnRhaW5lcnMuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvT3BlblR5cGVIaXN0b3J5LnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvT3BlblR5cGVIaXN0b3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGVlM2NiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9PcGVuVHlwZUhpc3RvcnkueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8dHlwZUluZm9IaXN0cm95Lz4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvUXVhbGlmaWVkVHlwZU5hbWVIaXN0b3J5LnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvUXVhbGlmaWVkVHlwZU5hbWVIaXN0b3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTM5MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9RdWFsaWZpZWRUeXBlTmFtZUhpc3RvcnkueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8cXVhbGlmaWVkVHlwZU5hbWVIaXN0cm95Lz4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlYjdiCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+CisJPHNlY3Rpb24gbmFtZT0iSmF2YUVsZW1lbnRTZWFyY2hBY3Rpb25zIj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzEyNDYyMDc2NTkuaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzEyNDYyMDc2NTkuaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwMTczYQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUvanNzZWFyY2gvMTI0NjIwNzY1OS5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzI0NTQyNzM1OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUvanNzZWFyY2gvMjQ1NDI3MzU4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDE3M2EKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzI0NTQyNzM1OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzI1MzAxNjE4NTguaW5kZXggYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzI1MzAxNjE4NTguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmYzk5ZQotLS0gL2Rldi9udWxsCisrKyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUvanNzZWFyY2gvMjUzMDE2MTg1OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzM1NjUxOTA2MC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUvanNzZWFyY2gvMzU2NTE5MDYwLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjc4NzMKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzM1NjUxOTA2MC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzcwMDg3NTM5OC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUvanNzZWFyY2gvNzAwODc1Mzk4LmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDhjY2UKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlL2pzc2VhcmNoLzcwMDg3NTM5OC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS90YXNrLXRhZ3MucHJvcGVydGllcyBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlL3Rhc2stdGFncy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDZjMjcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS90YXNrLXRhZ3MucHJvcGVydGllcwpAQCAtMCwwICsxLDMgQEAKKyMKKyNUdWUgU2VwIDI4IDE3OjUwOjE5IENFU1QgMjAyMQordGFzay10YWctcHJvamVjdHMtYWxyZWFkeS1zY2FubmVkPUdsZW1tQ2xpZW50LHRlc3RzLEdsZW1tU2VydmljZXMsdXRpbHMsSnNvblRyYXZlcnNlLHdmb3JtU2VydmljZXMsd2Zvcm1TZXJ2aWNlSmFyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zc2UudWkvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZmFlMjUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zc2UudWkvZGlhbG9nX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPgorCTxzZWN0aW9uIG5hbWU9ImNvbnRlbnRhc3Npc3RzaXplIj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uL2RlcC5pbmRleCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24vZGVwLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uL2RlcC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9mYXZvcml0ZXMud3NpbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2Zhdm9yaXRlcy53c2lsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNDI3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9mYXZvcml0ZXMud3NpbApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8aW5zcGVjdGlvbiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uLyIKK3htbG5zOndzaWx3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vd3NkbC8iCit4bWxuczp3c2lsdWRkaT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3VkZGkvIgoreG1sbnM6dWRkaT0idXJuOnVkZGktb3JnOmFwaSI+Cis8L2luc3BlY3Rpb24+CisKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2RpYWxvZ19zZXR0aW5ncy54bWwgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy51aS9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTBiNzcKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy51aS9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzZWN0aW9uIG5hbWU9IldvcmtiZW5jaCI+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS9kZWZhdWx0X2NhdGFsb2cueG1sIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUvZGVmYXVsdF9jYXRhbG9nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2ZhYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUvZGVmYXVsdF9jYXRhbG9nLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorICA8bmV4dENhdGFsb2cgY2F0YWxvZz0idXNlcl9jYXRhbG9nLnhtbCIgaWQ9InVzZXJfY2F0YWxvZyIvPgorICA8bmV4dENhdGFsb2cgY2F0YWxvZz0ic3lzdGVtX2NhdGFsb2cueG1sIiBpZD0ic3lzdGVtX2NhdGFsb2ciLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlL3N5c3RlbV9jYXRhbG9nLnhtbCBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlL3N5c3RlbV9jYXRhbG9nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU1MjYxCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUvc3lzdGVtX2NhdGFsb2cueG1sCkBAIC0wLDAgKzEsMTc2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubW9kZWwuZWRpdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphciEveHNkL21hdmVuLXY0XzBfMC54c2QiLz4KKyAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubW9kZWwuZWRpdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphciEveHNkL21hdmVuLXY0XzBfMC54c2QiLz4KKyAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL3NldHRpbmdzLTEuMC4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubW9kZWwuZWRpdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphciEveHNkL3NldHRpbmdzLXYxXzBfMC54c2QiLz4KKyAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL3Byb2ZpbGVzLTEuMC4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubW9kZWwuZWRpdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphciEveHNkL3Byb2ZpbGVzLXYxXzBfMC54c2QiLz4KKyAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL2FyY2hldHlwZS0xLjAuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9hcmNoZXR5cGUtMS4wLjAueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9hcmNoZXR5cGUtY2F0YWxvZy0xLjAuMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UubTJlLm1vZGVsLmVkaXRfMS45LjAuMjAxODA2MDYtMjAzNi5qYXIhL3hzZC9hcmNoZXR5cGUtY2F0YWxvZy0xLjAuMC54c2QiLz4KKyAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL2FyY2hldHlwZS1kZXNjcmlwdG9yLTEuMC4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5tMmUubW9kZWwuZWRpdF8xLjkuMC4yMDE4MDYwNi0yMDM2LmphciEveHNkL2FyY2hldHlwZS1kZXNjcmlwdG9yLTEuMC4wLnhzZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvd21sMTEuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMveGh0bWwxLXN0cmljdC5kdGQiIHdlYlVSTD0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL3hodG1sMS1mcmFtZXNldC5kdGQiIHdlYlVSTD0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtZnJhbWVzZXQuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy94aHRtbC1iYXNpYzEwLWYuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLWJhc2ljL3hodG1sLWJhc2ljMTAuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy94aHRtbDExLWZsYXQuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy94aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCIgd2ViVVJMPSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy93bWwxMy5kdGQiIHdlYlVSTD0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEzLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgRnJhbWVzZXQvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvZnJhbWVzZXQuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ZyYW1lc2V0LmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0VOVElUSUVTIExhdGluIDEvL0VOLy9IVE1MIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL2R0ZHMvSFRNTGxhdDEuZW50IiB3ZWJVUkw9IkhUTUxsYXQxLmVudCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwvL0VOLy9IVE0iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy9IVE1Mc3BlY2lhbC5lbnQiIHdlYlVSTD0iSFRNTHNwZWNpYWwuZW50Ii8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1czQy8vRU5USVRJRVMgU3ltYm9scy8vRU4vL0hUTUwiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy9IVE1Mc3ltYm9sLmVudCIgd2ViVVJMPSJIVE1Mc3ltYm9sLmVudCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL2xvb3NlLmR0ZCIgd2ViVVJMPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL3N0cmljdC5kdGQiIHdlYlVSTD0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC93c2RsLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEveHNkL3NvYXAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS94c2QvaHR0cC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC93c2RsLW1pbWUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEveHNkL3NvYXBlbmMueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEveHNkL3NvYXBlbnYueHNkIi8+CisgIDx1cmkgbmFtZT0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS94c2QveG1sY2F0YWxvZzExLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS53c3Quc3RhbmRhcmQuc2NoZW1hc18xLjAuODAwLnYyMDE3MTEyMDE3MzIuamFyIS9kdGRzL2xvb3NlLmR0ZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEvZHRkcy9zdHJpY3QuZHRkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3Mtc3gvd3Mtc2VjdXJpdHlwb2xpY3kvMjAwNzAyIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC93cy1zZWN1cml0eXBvbGljeS0xLjIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3Mtc3gvd3Mtc2VjdXJpdHlwb2xpY3kvMjAwODAyIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLndzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMC44MDAudjIwMTcxMTIwMTczMi5qYXIhL3hzZC93cy1zZWN1cml0eXBvbGljeS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxkc2lnLWNvcmUveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2Uud3N0LnN0YW5kYXJkLnNjaGVtYXNfMS4wLjgwMC52MjAxNzExMjAxNzMyLmphciEveHNkL3htbGRzaWctY29yZS1zY2hlbWEueHNkIi8+CisgIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS54c2RfMi4xNC4wLnYyMDE4MDEyNy0wNTQ3LmphciEvY2FjaGUvd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS54c2RfMi4xNC4wLnYyMDE4MDEyNy0wNTQ3LmphciEvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEoyRUUgQXBwbGljYXRpb24gMS4yLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl8xXzIuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL2FwcGxpY2F0aW9uXzFfMi5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEoyRUUgQXBwbGljYXRpb24gMS4zLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl8xXzMuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL2FwcGxpY2F0aW9uXzFfMy5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEoyRUUgQXBwbGljYXRpb24gQ2xpZW50IDEuMi8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzFfMi5kdGQiIHdlYlVSTD0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvYXBwbGljYXRpb24tY2xpZW50XzFfMi5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEoyRUUgQXBwbGljYXRpb24gQ2xpZW50IDEuMy8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzFfMy5kdGQiIHdlYlVSTD0iaHR0cDovL2phdmEuc3VuLmNvbS9kdGQvYXBwbGljYXRpb24tY2xpZW50XzFfMy5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIENvbm5lY3RvciAxLjAvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2Nvbm5lY3Rvcl8xXzAuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL2Nvbm5lY3Rvcl8xXzAuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBFbnRlcnByaXNlIEphdmFCZWFucyAxLjEvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2VqYi1qYXJfMV8xLmR0ZCIgd2ViVVJMPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy9lamItamFyXzFfMS5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEVudGVycHJpc2UgSmF2YUJlYW5zIDIuMC8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8yXzAuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL2VqYi1qYXJfMl8wLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8yXzIuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1hcHBfMi4yLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMy8vRU4iIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8yXzMuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL3dlYi1hcHBfMl8zLmR0ZCIvPgorICA8cHVibGljIHB1YmxpY0lkPSItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgRmFjZWxldCBUYWdsaWIgMS4wLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9mYWNlbGV0LXRhZ2xpYl8xXzAuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKYXZhU2VydmVyIEZhY2VzIENvbmZpZyAxLjAvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc2NvbmZpZ18xXzAuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL3dlYi1mYWNlc2NvbmZpZ18xXzAuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKYXZhU2VydmVyIEZhY2VzIENvbmZpZyAxLjEvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc2NvbmZpZ18xXzEuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL3dlYi1mYWNlc2NvbmZpZ18xXzEuZHRkIi8+CisgIDxwdWJsaWMgcHVibGljSWQ9Ii0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTiIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIiB3ZWJVUkw9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGQiLz4KKyAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjIvL0VOIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMi5kdGQiIHdlYlVSTD0iaHR0cDovL2phdmEuc3VuLmNvbS9kdGQvd2ViLWpzcHRhZ2xpYnJhcnlfMV8yLmR0ZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvYXBwbGljYXRpb25fMV80LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl8xXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvYXBwbGljYXRpb25fMV80LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl8xXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uXzUueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uXzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl81LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl82LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl82LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb25fNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uXzcueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2FwcGxpY2F0aW9uXzcueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl84LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbl84LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvajJlZS9hcHBsaWNhdGlvbi1jbGllbnRfMV80LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbi1jbGllbnRfMV80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYXBwbGljYXRpb24tY2xpZW50XzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uLWNsaWVudF82LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbi1jbGllbnRfNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uLWNsaWVudF82LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbi1jbGllbnRfNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uLWNsaWVudF83LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbi1jbGllbnRfNy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uLWNsaWVudF84LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9hcHBsaWNhdGlvbi1jbGllbnRfOC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2JhdGNoWE1MXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYmF0Y2hYTUxfMV8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvam9iWE1MXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvam9iWE1MXzFfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYmVhbnNfMV8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9iZWFuc18xXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9iZWFuc18xXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2JlYW5zXzFfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2JlYW5zXzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYmVhbnNfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYmVhbnNfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9iZWFuc18yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4Yi9iaW5kaW5nc2NoZW1hXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvYmluZGluZ3NjaGVtYV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2pheGIvYmluZGluZ3NjaGVtYV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2JpbmRpbmdzY2hlbWFfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvY29ubmVjdG9yXzFfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvY29ubmVjdG9yXzFfNS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvajJlZS9jb25uZWN0b3JfMV81LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9jb25uZWN0b3JfMV81LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9jb25uZWN0b3JfMV82LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9jb25uZWN0b3JfMV82LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvY29ubmVjdG9yXzFfNi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvY29ubmVjdG9yXzFfNi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2Nvbm5lY3Rvcl8xXzcueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2Nvbm5lY3Rvcl8xXzcueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9lamItamFyXzJfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8yXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvZWpiLWphcl8yXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2VqYi1qYXJfMl8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8zXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvZWpiLWphcl8zXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9lamItamFyXzNfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9lamItamFyXzNfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9lamItamFyXzNfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlLyIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlXzFfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2oyZWVfMV80LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlXzFfNC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvajJlZS9qMmVlXzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV8xXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2phdmFlZV81LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfNS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV81LnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfNS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvamF2YWVlXzYueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV82LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlXzYueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV82LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlXzcueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV83LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlXzgueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV84LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuaWJtLmNvbS93ZWJzZXJ2aWNlcy94c2QvajJlZV9qYXhycGNfbWFwcGluZ18xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfamF4cnBjX21hcHBpbmdfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvajJlZV9qYXhycGNfbWFwcGluZ18xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfamF4cnBjX21hcHBpbmdfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL2oyZWVfamF4cnBjX21hcHBpbmdfMV8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlX2pheHJwY19tYXBwaW5nXzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LmlibS5jb20vd2Vic2VydmljZXMveHNkL2oyZWVfd2ViX3NlcnZpY2VzXzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV93ZWJfc2VydmljZXNfMV8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvajJlZV93ZWJfc2VydmljZXNfMV8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlX3dlYl9zZXJ2aWNlc18xXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvajJlZV93ZWJfc2VydmljZXNfMV8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qMmVlX3dlYl9zZXJ2aWNlc18xXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfMV8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfMV8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzXzFfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc18xXzMueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV93ZWJfc2VydmljZXNfMV8zLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc18xXzMueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV93ZWJfc2VydmljZXNfMV8zLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc18xXzQueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV93ZWJfc2VydmljZXNfMV80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuaWJtLmNvbS93ZWJzZXJ2aWNlcy94c2QvajJlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2oyZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2oyZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvajJlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvajJlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzIueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV8zLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzMueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfd2ViX3NlcnZpY2VzX2NsaWVudF8xXzMueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2phdmFlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfMy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV93ZWJfc2VydmljZXNfY2xpZW50XzFfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvamF2YWVlX3dlYl9zZXJ2aWNlc19jbGllbnRfMV80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvanNwXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvanNwXzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvajJlZS9qc3BfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qc3BfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9qc3BfMl8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qc3BfMl8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvanNwXzJfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvanNwXzJfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvanNwXzJfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvanNwXzJfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2pzcF8yXzIueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL2pzcF8yXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qc3BfMl8zLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9qc3BfMl8zLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvcGVybWlzc2lvbnNfNy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvcGVybWlzc2lvbnNfNy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9wZXJzaXN0ZW5jZS9vcm1fMV8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9vcm1fMV8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9wZXJzaXN0ZW5jZS9vcm1fMV8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9vcm1fMV8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlL29ybV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL29ybV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL3BlcnNpc3RlbmNlL29ybV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL29ybV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL3BlcnNpc3RlbmNlL29ybV8yXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL29ybV8yXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2VfMV8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9wZXJzaXN0ZW5jZV8xXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlXzFfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvcGVyc2lzdGVuY2VfMV8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvcGVyc2lzdGVuY2VfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9wZXJzaXN0ZW5jZS9wZXJzaXN0ZW5jZV8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3BlcnNpc3RlbmNlXzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2VfMl8xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy9wZXJzaXN0ZW5jZV8yXzEueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3d3dy5qYm9zcy5vcmcveG1sL25zL2phdmF4L3ZhbGlkYXRpb24vY29uZmlndXJhdGlvbi92YWxpZGF0aW9uLWNvbmZpZ3VyYXRpb24tMS4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy92YWxpZGF0aW9uLWNvbmZpZ3VyYXRpb24tMS4wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuamJvc3Mub3JnL3htbC9ucy9qYXZheC92YWxpZGF0aW9uL2NvbmZpZ3VyYXRpb24vdmFsaWRhdGlvbi1jb25maWd1cmF0aW9uLTEuMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvdmFsaWRhdGlvbi1jb25maWd1cmF0aW9uLTEuMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvdmFsaWRhdGlvbi9jb25maWd1cmF0aW9uL3ZhbGlkYXRpb24tY29uZmlndXJhdGlvbi0yLjAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3ZhbGlkYXRpb24tY29uZmlndXJhdGlvbi0yLjAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3d3dy5qYm9zcy5vcmcveG1sL25zL2phdmF4L3ZhbGlkYXRpb24vbWFwcGluZy92YWxpZGF0aW9uLW1hcHBpbmctMS4wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy92YWxpZGF0aW9uLW1hcHBpbmctMS4wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuamJvc3Mub3JnL3htbC9ucy9qYXZheC92YWxpZGF0aW9uL21hcHBpbmcvdmFsaWRhdGlvbi1tYXBwaW5nLTEuMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvdmFsaWRhdGlvbi1tYXBwaW5nLTEuMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvdmFsaWRhdGlvbi9tYXBwaW5nL3ZhbGlkYXRpb24tbWFwcGluZy0yLjAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3ZhbGlkYXRpb24tbWFwcGluZy0yLjAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8yXzQueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1hcHBfMl80LnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8yXzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWFwcF8yXzUueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItYXBwXzNfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItYXBwXzNfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItYXBwXzNfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfNF8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItYXBwXzRfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWNvbW1vbl8zXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1jb21tb25fM18wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWNvbW1vbl8zXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1jb21tb25fM18wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWNvbW1vbl8zXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1jb21tb25fM18xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWNvbW1vbl80XzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1jb21tb25fNF8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItZmFjZWxldHRhZ2xpYnJhcnlfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZWxldHRhZ2xpYnJhcnlfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VsZXR0YWdsaWJyYXJ5XzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VsZXR0YWdsaWJyYXJ5XzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mYWNlbGV0dGFnbGlicmFyeV8yXzIueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlbGV0dGFnbGlicmFyeV8yXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZmFjZWxldHRhZ2xpYnJhcnlfMl8zLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZWxldHRhZ2xpYnJhcnlfMl8zLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItZmFjZXNjb25maWdfMV8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXNjb25maWdfMV8yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzY29uZmlnXzFfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VzY29uZmlnXzFfMi54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzY29uZmlnXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VzY29uZmlnXzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mYWNlc2NvbmZpZ18yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc2NvbmZpZ18yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZmFjZXNjb25maWdfMl8yLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXNjb25maWdfMl8yLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzY29uZmlnXzJfMy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZhY2VzY29uZmlnXzJfMy54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzdWljb21wb25lbnRfMl8wLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZmFjZXN1aWNvbXBvbmVudF8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZmFjZXN1aWNvbXBvbmVudF8yXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mYWNlc3VpY29tcG9uZW50XzJfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZyYWdtZW50XzNfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1mcmFnbWVudF8zXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItZnJhZ21lbnRfM18xLnhzZCIgdXJpPSJqYXI6ZmlsZTovQzovUHJvZ3JhbSBGaWxlcy9lY2xpcHNlL2phdmEtcGhvdG9uL2VjbGlwc2UvLi4vLi4vLi4vLi4vVXNlcnMvQWRtaW5fQSZhbXA7Q28vLnAyL3Bvb2wvcGx1Z2lucy9vcmcuZWNsaXBzZS5qc3Quc3RhbmRhcmQuc2NoZW1hc18xLjIuMjAxLnYyMDE4MDIwNTE2NTIuamFyIS9kdGRzQW5kU2NoZW1hcy93ZWItZnJhZ21lbnRfM18xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzRfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWZyYWdtZW50XzRfMC54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWpzcHRhZ2xpYnJhcnlfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qMmVlL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWpzcHRhZ2xpYnJhcnlfMl8wLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItanNwdGFnbGlicmFyeV8yXzEueHNkIiB1cmk9ImphcjpmaWxlOi9DOi9Qcm9ncmFtIEZpbGVzL2VjbGlwc2UvamF2YS1waG90b24vZWNsaXBzZS8uLi8uLi8uLi8uLi9Vc2Vycy9BZG1pbl9BJmFtcDtDby8ucDIvcG9vbC9wbHVnaW5zL29yZy5lY2xpcHNlLmpzdC5zdGFuZGFyZC5zY2hlbWFzXzEuMi4yMDEudjIwMTgwMjA1MTY1Mi5qYXIhL2R0ZHNBbmRTY2hlbWFzL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMS54c2QiLz4KKyAgPHVyaSBuYW1lPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1qc3B0YWdsaWJyYXJ5XzJfMS54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLWpzcHRhZ2xpYnJhcnlfMl8xLnhzZCIvPgorICA8dXJpIG5hbWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItcGFydGlhbHJlc3BvbnNlXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItcGFydGlhbHJlc3BvbnNlXzJfMC54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzAueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItcGFydGlhbHJlc3BvbnNlXzJfMi54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzIueHNkIi8+CisgIDx1cmkgbmFtZT0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItcGFydGlhbHJlc3BvbnNlXzJfMy54c2QiIHVyaT0iamFyOmZpbGU6L0M6L1Byb2dyYW0gRmlsZXMvZWNsaXBzZS9qYXZhLXBob3Rvbi9lY2xpcHNlLy4uLy4uLy4uLy4uL1VzZXJzL0FkbWluX0EmYW1wO0NvLy5wMi9wb29sL3BsdWdpbnMvb3JnLmVjbGlwc2UuanN0LnN0YW5kYXJkLnNjaGVtYXNfMS4yLjIwMS52MjAxODAyMDUxNjUyLmphciEvZHRkc0FuZFNjaGVtYXMvd2ViLXBhcnRpYWxyZXNwb25zZV8yXzMueHNkIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS93c3AtS29yQVAtU2VydmljZXMvLm1ldGFkYXRhL3ZlcnNpb24uaW5pIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS92ZXJzaW9uLmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjViODIzCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5tZXRhZGF0YS92ZXJzaW9uLmluaQpAQCAtMCwwICsxLDMgQEAKKyNUdWUgTm92IDA5IDE1OjE2OjI2IENFVCAyMDIxCitvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU9Mgorb3JnLmVjbGlwc2UucGxhdGZvcm09NC44LjAudjIwMTgwNjExLTA1MDAKZGlmZiAtLWdpdCBhL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ucmVjb21tZW5kZXJzL2NhY2hlcy9pZGVudGlmaWVkLXByb2plY3QtY29vcmRpbmF0ZXMuanNvbiBiL3dzcC1Lb3JBUC1TZXJ2aWNlcy8ucmVjb21tZW5kZXJzL2NhY2hlcy9pZGVudGlmaWVkLXByb2plY3QtY29vcmRpbmF0ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTI2ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5yZWNvbW1lbmRlcnMvY2FjaGVzL2lkZW50aWZpZWQtcHJvamVjdC1jb29yZGluYXRlcy5qc29uCkBAIC0wLDAgKzEgQEAKK3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd3NwLUtvckFQLVNlcnZpY2VzLy5yZWNvbW1lbmRlcnMvY2FjaGVzL21hbnVhbC1tYXBwaW5ncy5qc29uIGIvd3NwLUtvckFQLVNlcnZpY2VzLy5yZWNvbW1lbmRlcnMvY2FjaGVzL21hbnVhbC1tYXBwaW5ncy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjZkZmUKLS0tIC9kZXYvbnVsbAorKysgYi93c3AtS29yQVAtU2VydmljZXMvLnJlY29tbWVuZGVycy9jYWNoZXMvbWFudWFsLW1hcHBpbmdzLmpzb24KQEAgLTAsMCArMSBAQAore30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==