From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Frank Crawford To: git-commits@fedoraproject.org Subject: [rpms/hash-slinger] epel9: Upgrade to new upstream version and fixes for tlsa Date: Fri, 31 Jul 2026 05:54:43 GMT Message-ID: <178547728391.1.17934530402942759522.rpms-hash-slinger-a43b5cd6f230@fedoraproject.org> List-ID: X-Git-Repo: rpms/hash-slinger X-Git-Branch: epel9 X-Git-Rev: a43b5cd6f23097b01b2756f7e67939eac706c7ce QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvaGFzaC1zbGluZ2Vy CkJyYW5jaCA6IGVwZWw5CkNvbW1pdCA6IGE0M2I1Y2Q2ZjIzMDk3YjAxYjI3NTZmN2U2NzkzOWVh YzcwNmM3Y2UKQXV0aG9yIDogRnJhbmsgQ3Jhd2ZvcmQgPGZyYW5rQGNyYXdmb3JkLmVtdS5pZC5h dT4KRGF0ZSAgIDogMjAyNi0wNy0zMVQxNDoyMTo0MSsxMDowMApTdGF0cyAgOiArOTMzLy00IGlu IDMgZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2hh c2gtc2xpbmdlci9jL2E0M2I1Y2Q2ZjIzMDk3YjAxYjI3NTZmN2U2NzkzOWVhYzcwNmM3Y2U/YnJh bmNoPWVwZWw5CgpMb2c6ClVwZ3JhZGUgdG8gbmV3IHVwc3RyZWFtIHZlcnNpb24gYW5kIGZpeGVz IGZvciB0bHNhCgotLS0KZGlmZiAtLWdpdCBhL2hhc2gtc2xpbmdlci5zcGVjIGIvaGFzaC1zbGlu Z2VyLnNwZWMKaW5kZXggNzliOWQyNy4uOWYxODgxNiAxMDA2NDQKLS0tIGEvaGFzaC1zbGluZ2Vy LnNwZWMKKysrIGIvaGFzaC1zbGluZ2VyLnNwZWMKQEAgLTIsMjAgKzIsMzUgQEAKIAogU3VtbWFy eTogR2VuZXJhdGUgYW5kIHZlcmlmeSB2YXJpb3VzIEROUyByZWNvcmRzIHN1Y2ggYXMgU1NIRlAs IFRMU0EgYW5kIE9QRU5QR1BLRVkKIE5hbWU6IGhhc2gtc2xpbmdlcgotVmVyc2lvbjogMy41Ci1S ZWxlYXNlOiAxJXs/ZGlzdH0KK1ZlcnNpb246IDMuNgorUmVsZWFzZTogMiV7P2Rpc3R9CiBMaWNl bnNlOiBHUEwtMi4wLW9yLWxhdGVyCiBVcmw6ICBodHRwczovL2dpdGh1Yi5jb20vbGV0b2Ftcy8l e25hbWV9LwotU291cmNlOiAgJXt1cmx9YXJjaGl2ZS8le3ZlcnNpb259LyV7bmFtZX0tJXt2ZXJz aW9ufS50YXIuZ3oKK1NvdXJjZTA6ICAle3VybH1hcmNoaXZlLyV7dmVyc2lvbn0vJXtuYW1lfS0l e3ZlcnNpb259LnRhci5negorIyBiYWNrIHBvcnQgdGxzYSBmcm9tIHYzLjQgZm9yIFJIRUwgc3lz dGVtcyBhcyBweXRob24gPCAzLjEzIGV4Y2VwdCBSSEVMMTAKKyMgaHR0cHM6Ly9naXRodWIuY29t L2xldG9hbXMvaGFzaC1zbGluZ2VyL2lzc3Vlcy81NAorU291cmNlMTogIHRsc2EtdjMuNAogJWlm ICV7d2l0aCBtYW59CiAjIE9ubHkgdG8gcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2UsIHdoaWNoIGlz IHNoaXBwZWQgcGVyIGRlZmF1bHQKIEJ1aWxkcmVxdWlyZXM6IHhtbHRvCiAlZW5kaWYKIEJ1aWxk UmVxdWlyZXM6IHB5dGhvbjMtZGV2ZWwsIG1ha2UKKyVpZiAwJXs/cmhlbH0gJiYgMCV7P3JoZWx9 IDw9IDkKIFJlcXVpcmVzOiBweXRob24zID49IDMuNAorJWVsc2UKKyVpZiAwJXs/cmhlbH0gPT0g MTAKKyMgVGhpcyBpcyBub3QgcXVpdGUgcmlnaHQgZm9yIHRsc2EsIGJ1dCB3aWxsIHdvcmsgZm9y IG1vc3QgdXNlcworUmVxdWlyZXM6IHB5dGhvbjMgPj0gMy4xMgorJWVsc2UKK1JlcXVpcmVzOiBw eXRob24zID49IDMuMTMKKyVlbmRpZgorJWVuZGlmCiBSZXF1aXJlczogcHl0aG9uMy1kbnMsIHB5 dGhvbjMtdW5ib3VuZAogUmVxdWlyZXM6IG9wZW5zc2gtY2xpZW50cyA+PSA0LCBweXRob24zLWdu dXBnID49IDAuMy43CiBSZXF1aXJlczogcHl0aG9uMy1jcnlwdG9ncmFwaHkKKyVpZiAwJXs/cmhl bH0gJiYgMCV7P3JoZWx9IDw9IDkKK1JlcXVpcmVzOiBweXRob24zLW0yY3J5cHRvCislZW5kaWYK IEJ1aWxkQXJjaDogbm9hcmNoCiBPYnNvbGV0ZXM6IHNzaGZwIDwgMi4wCiBQcm92aWRlczogc3No ZnAgID0gJXt2ZXJzaW9ufQpAQCAtMzUsNiArNTAsOSBAQCBUaGlzIHBhY2thZ2UgaGFzIGluY29y cG9yYXRlZCB0aGUgb2xkICdzc2hmcCcgYW5kICdzd2VkZScgY29tbWFuZHMvcGFja2FnZXMKIAog JXByZXAKICVhdXRvc2V0dXAgLXAxCislaWYgMCV7P3JoZWx9ICYmIDAlez9yaGVsfSA8PSA5Citj cCAle1NPVVJDRTF9IHRsc2EKKyVlbmRpZgogCiAlYnVpbGQKICVtYWtlX2J1aWxkIGFsbApAQCAt NDksNiArNjcsMTUgQEAgVGhpcyBwYWNrYWdlIGhhcyBpbmNvcnBvcmF0ZWQgdGhlIG9sZCAnc3No ZnAnIGFuZCAnc3dlZGUnIGNvbW1hbmRzL3BhY2thZ2VzCiAlZG9jICV7X21hbmRpcn0vbWFuMS8q CiAKICVjaGFuZ2Vsb2cKKyogRnJpIEp1bCAzMSAyMDI2IEZyYW5rIENyYXdmb3JkIDxmcmFua0Bj cmF3Zm9yZC5lbXUuaWQuYXU+IC0gMy42LTIKKy0gQmFja3BvcnQgdGxzYSBmcm9tIHYzLjQgZm9y IG9sZGVyIFJIRUwgc3lzdGVtcyBhcyBweXRob24gPCAzLjEzCisKKyogU2F0IEp1bCAyNSAyMDI2 IEZyYW5rIENyYXdmb3JkIDxmcmFua0BjcmF3Zm9yZC5lbXUuaWQuYXU+IC0gMy42LTEKKy0gVXBk YXRlZCB0byAzLjYKKworKiBUaHUgSnVsIDE2IDIwMjYgRmVkb3JhIFJlbGVhc2UgRW5naW5lZXJp bmcgPHJlbGVuZ0BmZWRvcmFwcm9qZWN0Lm9yZz4gLSAzLjUtMgorLSBSZWJ1aWx0IGZvciBodHRw czovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzQ1X01hc3NfUmVidWlsZAorCiAqIFR1 ZSBGZWIgMjQgMjAyNiBGcmFuayBDcmF3Zm9yZCA8ZnJhbmtAY3Jhd2ZvcmQuZW11LmlkLmF1PiAt IDMuNS0xCiAtIFVwZGF0ZWQgdG8gMy41CiAtIFJlZW5hYmxlIHRsc2EgdXNpbmcgcHl0aG9uMy1j cnlwdG9ncmFwaHkgLSBCWjIzMTgzMDYgYW5kIEJaMjM2NzExNQoKZGlmZiAtLWdpdCBhL3NvdXJj ZXMgYi9zb3VyY2VzCmluZGV4IGNhODgwYzQuLmJkZGNlNzEgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMK KysrIGIvc291cmNlcwpAQCAtMSArMSBAQAotU0hBNTEyIChoYXNoLXNsaW5nZXItMy41LnRhci5n eikgPSBhYzMwY2ZmYTBkYmI4MzM4OWYyMTUxMDAwMzVhZGU4NDBmOGZjOTQ3ZThmNjI1ZTE4MDY4 ZmE2ZDJhYzQ5YzVlN2Y1YmU2Y2QyNDdmNzBmNDZjNzM0NzJjYzEzNzQ0Mzk0NGMyMGQ3Yjc2NmZj Y2JiY2I1NzUyNGI4ODg3YTQzMQorU0hBNTEyIChoYXNoLXNsaW5nZXItMy42LnRhci5neikgPSA3 NjcxODEwNzNjZmU0ZGUzZWZhMDViMjVhZDMxZDUyNTgxNDIwNjM0ZDE0MmM5ZDg0M2M5MmIzYjc1 MjExOGEzYzNiYTIyM2NhMGM3MjI3MTg4ZjAyYjg5Zjg5OWQ3ZmQ1YzFmMTdkNDMzZmU2MWRhZTc5 NjYwNzU1ZjNjMzIzMgoKZGlmZiAtLWdpdCBhL3Rsc2EtdjMuNCBiL3Rsc2EtdjMuNApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGJmNDI0Ci0tLSAvZGV2L251bGwKKysrIGIv dGxzYS12My40CkBAIC0wLDAgKzEsOTAyIEBACisjIS91c3IvYmluL3B5dGhvbjMKKworIyB0bHNh IC0gQSB0b29sIHRvIGNyZWF0ZSBEQU5FL1RMU0EgcmVjb3Jkcy4gKGNhbGxlZCAnc3dlZGUnIGJl Zm9yZSkKKyMKKyMgVGhpcyB0b29sIGlzIGxvb3NseSBiYXNlZCBvbiB0aGUgJ2RhbmUnIHByb2dy YW0gaW4gdGhlIHNzaGZwIHBhY2thZ2UgYnkgUGF1bAorIyBXb3V0ZXJzIGFuZCBDaHJpc3RvcGhl ciBPbGFoCisjCisjIENvcHlyaWdodCAyMDEyIFBpZXRlciBMZXhpcyA8cGlldGVyLmxleGlzQG9z My5ubD4KKyMgQ29weXJpZ2h0IDIwMTQgUGF1bCBXb3V0ZXJzIDxwd291dGVyc0ByZWRoYXQuY29t PgorIyBDb3B5cmlnaHQgMjAxNS0yMDE5IERpcmsgU3RvZWNrZXIgPGhhc2hzbGluZ2VyQGRzdG9l Y2tlci5kZT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworVkVSU0lPTj0i My40IgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1bmJv dW5kCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHJlCitmcm9tIE0yQ3J5cHRvIGltcG9ydCBY NTA5LCBTU0wsIEJJTywgbTIKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGIyYV9oZXgKK2Zyb20gaGFz aGxpYiBpbXBvcnQgc2hhMjU2LCBzaGE1MTIKK2Zyb20gaXBhZGRyZXNzIGltcG9ydCBJUHY0QWRk cmVzcywgSVB2NkFkZHJlc3MKKworUk9PVEtFWT0ibm9uZSIKK2NhdWxkcm9uID0gKCAiL3Zhci9s aWIvdW5ib3VuZC9yb290LmFuY2hvciIsICIvdmFyL2xpYi91bmJvdW5kL3Jvb3Qua2V5IiwgIi9l dGMvdW5ib3VuZC9yb290LmtleSIsICIvdXNyL3NoYXJlL2Rucy9yb290LmtleSIgKQorZm9yIHJv b3QgaW4gY2F1bGRyb246CisJaWYgb3MucGF0aC5pc2ZpbGUocm9vdCk6CisJCVJPT1RLRVk9cm9v dAorCQlicmVhaworCitkZWYgZ2VuVExTQShob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIGNlcnRp ZmljYXRlLCBvdXRwdXQ9J3JmYycsIHVzYWdlPTEsIHNlbGVjdG9yPTAsIG10eXBlPTEpOgorCSIi IlRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgVExTQVJlY29yZCBvYmplY3QgdXNpbmcgdGhlIGRh dGEgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXJzLAorCWl0IHRoZW4gdmFsaWRhdGVzIHRoZSByZWNv cmQgYW5kIHJldHVybnMgdGhlIFJSIGFzIGEgc3RyaW5nLgorCSIiIgorCSMgY2hlY2sgaWYgdmFs aWQgdmFycyB3ZXJlIHBhc3NlZAorCWlmIGhvc3RuYW1lWy0xXSAhPSAnLic6CisJCWhvc3RuYW1l ICs9ICcuJworCisJIyBDcmVhdGUgdGhlIHJlY29yZCB3aXRob3V0IGEgY2VydGlmaWNhdGUKKwlp ZiBwb3J0ID09ICcqJzoKKwkJcmVjb3JkID0gVExTQVJlY29yZChuYW1lPSclcy5fJXMuJXMnJShw b3J0LHByb3RvY29sLGhvc3RuYW1lKSwgdXNhZ2U9dXNhZ2UsIHNlbGVjdG9yPXNlbGVjdG9yLCBt dHlwZT1tdHlwZSwgY2VydCA9JycpCisJZWxzZToKKwkJcmVjb3JkID0gVExTQVJlY29yZChuYW1l PSdfJXMuXyVzLiVzJyUocG9ydCxwcm90b2NvbCxob3N0bmFtZSksIHVzYWdlPXVzYWdlLCBzZWxl Y3Rvcj1zZWxlY3RvciwgbXR5cGU9bXR5cGUsIGNlcnQgPScnKQorCSMgQ2hlY2sgaWYgdGhlIHJl Y29yZCBpcyB2YWxpZAorCWlmIHJlY29yZC5pc1ZhbGlkOgorCQlpZiByZWNvcmQuc2VsZWN0b3Ig PT0gMDoKKwkJCSMgSGFzaCB0aGUgRnVsbCBjZXJ0aWZpY2F0ZQorCQkJcmVjb3JkLmNlcnQgPSBn ZXRIYXNoKGNlcnRpZmljYXRlLCByZWNvcmQubXR5cGUpCisJCWVsc2U6CisJCQkjIEhhc2ggb25s eSB0aGUgU3ViamVjdFB1YmxpY0tleUluZm8KKwkJCXJlY29yZC5jZXJ0ID0gZ2V0SGFzaChjZXJ0 aWZpY2F0ZS5nZXRfcHVia2V5KCksIHJlY29yZC5tdHlwZSkKKworCXJlY29yZC5pc1ZhbGlkKHJh aXNlRXhjZXB0aW9uPVRydWUpCisKKwlpZiBvdXRwdXQgPT0gJ2dlbmVyaWMnOgorCQlyZXR1cm4g cmVjb3JkLmdldFJlY29yZChnZW5lcmljPVRydWUpCisJcmV0dXJuIHJlY29yZC5nZXRSZWNvcmQo KQorCitkZWYgZ2VuUmVjb3Jkcyhob3N0bmFtZSwgYWRkcmVzcywgcHJvdG9jb2wsIHBvcnQsIGNo YWluLCBvdXRwdXQ9J3JmYycsIHVzYWdlPTEsIHNlbGVjdG9yPTAsIG10eXBlPTEpOgorCWNlcnQg PSBOb25lCisJY2hhaW5lZCA9IGNoZWNrQ2hhaW5MaW5rKGNoYWluKVswXQorCWlmIG5vdCBjaGFp bmVkOgorCQlwcmludCgiV0FSTjogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwljZXJ0c2xl ZnQgPSBsZW4oY2hhaW4pCisJZm9yIGNoYWluY2VydCBpbiBjaGFpbjoKKwkJY2VydHNsZWZ0IC09 IDEKKwkJaWYgdXNhZ2UgPT0gMSBvciB1c2FnZSA9PSAzOgorCQkJIyBUaGUgZmlyc3QgY2VydCBp cyB0aGUgZW5kLWVudGl0eSBjZXJ0CisJCQlwcmludCgnR290IGEgY2VydGlmaWNhdGUgZm9yICVz IHdpdGggU3ViamVjdDogJXMnICUgKGFkZHJlc3MsIGNoYWluY2VydC5nZXRfc3ViamVjdCgpKSkK KwkJCWNlcnQgPSBjaGFpbmNlcnQKKwkJCWJyZWFrCisJCWVsc2U6CisJCQlpZiAodXNhZ2UgPT0g MCBhbmQgY2hhaW5jZXJ0LmNoZWNrX2NhKCkpIG9yIHVzYWdlID09IDI6CisJCQkJaWYgY2VydHNs ZWZ0OiAjIGRvbid0IGFzayBmb3IgdGhlIGxhc3Qgb25lCisJCQkJCXN5cy5zdGRvdXQud3JpdGUo J0dvdCBhIGNlcnRpZmljYXRlIHdpdGggdGhlIGZvbGxvd2luZyBTdWJqZWN0OlxuXHQlc1xuVXNl IHRoaXMgYXMgY2VydGlmaWNhdGUgdG8gbWF0Y2g/IFt5L05dICcgJSBjaGFpbmNlcnQuZ2V0X3N1 YmplY3QoKSkKKwkJCQkJaW5wdXRfb2sgPSBGYWxzZQorCQkJCQl3aGlsZSBub3QgaW5wdXRfb2s6 CisJCQkJCQl1c2VyX2lucHV0ID0gaW5wdXQoKQorCQkJCQkJaWYgdXNlcl9pbnB1dCBpbiBbJycs J24nLCdOJ106CisJCQkJCQkJaW5wdXRfb2s9VHJ1ZQorCQkJCQkJZWxpZiB1c2VyX2lucHV0IGlu IFsneScsICdZJ106CisJCQkJCQkJaW5wdXRfb2sgPSBUcnVlCisJCQkJCQkJY2VydCA9IGNoYWlu Y2VydAorCQkJCQkJZWxzZToKKwkJCQkJCQlzeXMuc3Rkb3V0LndyaXRlKCdQbGVhc2UgYW5zd2Vy IFkgb3IgTicpCisJCQkJZWxzZToKKwkJCQkJcHJpbnQoJ1VzaW5nIGNlcnRpZmljYXRlIHdpdGgg dGhlIGZvbGxvd2luZyBTdWJqZWN0OlxuXHQlc1xuJyAlIGNoYWluY2VydC5nZXRfc3ViamVjdCgp KQorCQkJCQljZXJ0ID0gY2hhaW5jZXJ0CisJCQlpZiBjZXJ0OgorCQkJCWJyZWFrCisKKwlpZiBj ZXJ0OiAjIFByaW50IHRoZSByZXF1ZXN0ZWQgcmVjb3JkcyBiYXNlZCBvbiB0aGUgcmV0cmlldmVk IGNlcnRpZmljYXRlcworCQlpZiBvdXRwdXQgPT0gJ2JvdGgnOgorCQkJcHJpbnQoZ2VuVExTQSho b3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIGNlcnQsICdkcmFmdCcsIHVzYWdlLCBzZWxlY3Rvciwg bXR5cGUpKQorCQkJcHJpbnQoZ2VuVExTQShob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIGNlcnQs ICdyZmMnLCB1c2FnZSwgc2VsZWN0b3IsIG10eXBlKSkKKwkJZWxzZToKKwkJCXByaW50KGdlblRM U0EoaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0LCBjZXJ0LCBvdXRwdXQsIHVzYWdlLCBzZWxlY3Rv ciwgbXR5cGUpKQorCisJIyBDbGVhciB0aGUgY2VydCBmcm9tIG1lbW9yeSAodG8gc3RvcCBNMkNy eXB0byBmcm9tIHNlZ2ZhdWx0aW5nKQorCWNlcnQ9Tm9uZQorCitkZWYgZ2V0QShob3N0bmFtZSwg c2VjdXJlPVRydWUpOgorCSIiIkdldHMgYSBsaXN0IG9mIEEgcmVjb3JkcyBmb3IgaG9zdG5hbWUs IHJldHVybnMgYSBsaXN0IG9mIEFSZWNvcmRzIiIiCisJcmVjb3JkcyA9IFtdCisJdHJ5OgorCQly ZWNvcmRzID0gZ2V0UmVjb3Jkcyhob3N0bmFtZSwgcnJ0eXBlPSdBJywgc2VjdXJlPXNlY3VyZSkK KwlleGNlcHQgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24gYXMgZToKKwkJcHJpbnQoc3RyKGUpKQor CWV4Y2VwdCBETlNMb29rdXBFcnJvciBhcyBlOgorCQlwcmludCgnVW5hYmxlIHRvIHJlc29sdmUg JXM6ICVzJyAlIChob3N0bmFtZSwgc3RyKGUpKSkKKwlyZXQgPSBbXQorCWZvciByZWNvcmQgaW4g cmVjb3JkczoKKwkJcmV0LmFwcGVuZChBUmVjb3JkKGhvc3RuYW1lLCBzdHIoSVB2NEFkZHJlc3Mo aW50KGIyYV9oZXgocmVjb3JkKSwxNikpKSkpCisJcmV0dXJuIHJldAorCitkZWYgZ2V0QUFBQSho b3N0bmFtZSwgc2VjdXJlPVRydWUpOgorCSIiIkdldHMgYSBsaXN0IG9mIEFBQUEgcmVjb3JkcyBm b3IgaG9zdG5hbWUsIHJldHVybnMgYSBsaXN0IG9mIEFBQUFSZWNvcmRzIiIiCisJcmVjb3JkcyA9 IFtdCisJdHJ5OgorCQlyZWNvcmRzID0gZ2V0UmVjb3Jkcyhob3N0bmFtZSwgcnJ0eXBlPSdBQUFB Jywgc2VjdXJlPXNlY3VyZSkKKwlleGNlcHQgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24gYXMgZToK KwkJcHJpbnQoc3RyKGUpKQorCWV4Y2VwdCBETlNMb29rdXBFcnJvciBhcyBlOgorCQlwcmludCgn VW5hYmxlIHRvIHJlc29sdmUgJXM6ICVzJyAlIChob3N0bmFtZSwgc3RyKGUpKSkKKwlyZXQgPSBb XQorCWZvciByZWNvcmQgaW4gcmVjb3JkczoKKwkJcmV0LmFwcGVuZChBQUFBUmVjb3JkKGhvc3Ru YW1lLCBzdHIoSVB2NkFkZHJlc3MoaW50KGIyYV9oZXgocmVjb3JkKSwxNikpKSkpCisJcmV0dXJu IHJldAorCitkZWYgZ2V0VmVyaWZpY2F0aW9uRXJyb3JSZWFzb24obnVtKToKKwkiIiJUaGlzIGZ1 bmN0aW9uIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFg1MDkgRXJyb3IgYmFzZWQgb24gaW50KG51 bSkKKwkiIiIKKwkjIFRoZXNlIHdlcmUgdGFrZW4gZnJvbSB0aGUgTTJDcnlwdG8ubTIgY29kZQor CXJldHVybiB7Cis1MDogIlg1MDlfVl9FUlJfQVBQTElDQVRJT05fVkVSSUZJQ0FUSU9OIiwKKzIy OiAiWDUwOV9WX0VSUl9DRVJUX0NIQUlOX1RPT19MT05HIiwKKzEwOiAiWDUwOV9WX0VSUl9DRVJU X0hBU19FWFBJUkVEIiwKKzk6ICAiWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQiLAorMjg6 ICJYNTA5X1ZfRVJSX0NFUlRfUkVKRUNURUQiLAorMjM6ICJYNTA5X1ZfRVJSX0NFUlRfUkVWT0tF RCIsCis3OiAgIlg1MDlfVl9FUlJfQ0VSVF9TSUdOQVRVUkVfRkFJTFVSRSIsCisyNzogIlg1MDlf Vl9FUlJfQ0VSVF9VTlRSVVNURUQiLAorMTI6ICJYNTA5X1ZfRVJSX0NSTF9IQVNfRVhQSVJFRCIs CisxMTogIlg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQiLAorODogICJYNTA5X1ZfRVJSX0NS TF9TSUdOQVRVUkVfRkFJTFVSRSIsCisxODogIlg1MDlfVl9FUlJfREVQVEhfWkVST19TRUxGX1NJ R05FRF9DRVJUIiwKKzE0OiAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVM RCIsCisxMzogIlg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9OT1RfQkVGT1JFX0ZJRUxEIiwKKzE1 OiAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklFTEQiLAorMTY6ICJYNTA5 X1ZfRVJSX0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9GSUVMRCIsCisyNDogIlg1MDlfVl9FUlJf SU5WQUxJRF9DQSIsCisyNjogIlg1MDlfVl9FUlJfSU5WQUxJRF9QVVJQT1NFIiwKKzE3OiAiWDUw OV9WX0VSUl9PVVRfT0ZfTUVNIiwKKzI1OiAiWDUwOV9WX0VSUl9QQVRIX0xFTkdUSF9FWENFRURF RCIsCisxOTogIlg1MDlfVl9FUlJfU0VMRl9TSUdORURfQ0VSVF9JTl9DSEFJTiIsCis2OiAgIlg1 MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWSIsCis0OiAgIlg1MDlf Vl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ0VSVF9TSUdOQVRVUkUiLAorNTogICJYNTA5X1ZfRVJS X1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkUiLAorMzogICJYNTA5X1ZfRVJSX1VOQUJM RV9UT19HRVRfQ1JMIiwKKzI6ICAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJU IiwKKzIwOiAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFkiLAor MjE6ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiLAorMDogICJY NTA5X1ZfT0sifVtpbnQobnVtKV0KKworZGVmIGdldFJlY29yZHMoaG9zdG5hbWUsIHJydHlwZT0n QScsIHNlY3VyZT1UcnVlLCBub3Jlc29sdmVyPUZhbHNlKToKKwkiIiJEbyBhIGxvb2t1cCBvZiBh IG5hbWUgYW5kIGEgcnJ0eXBlLCByZXR1cm5zIGEgbGlzdCBvZiBiaW5hcnkgY29kZWQgc3RyaW5n cy4gT25seSBxdWVyaWVzIGZvciBycl9jbGFzcyBJTi4iIiIKKwlnbG9iYWwgcmVzb2x2Y29uZgor CWN0eCA9IHVuYm91bmQudWJfY3R4KCkKKwlpZiBvcy5wYXRoLmlzZmlsZShST09US0VZKToKKwkJ IyBmaWxlIGZvcm1hdCBndWVzc2luZyAtIHVuYm91bmQgc2hvdWxkIGRlYWwgd2l0aCB0aGlzIDoo CisJCXRyeToKKwkJCWN0eC5hZGRfdGFfZmlsZShST09US0VZKQorCQlleGNlcHQ6CisJCQl1bmJv dW5kLnViX2N0eF90cnVzdGVka2V5cyhjdHgsUk9PVEtFWSkKKwkjIFVzZSB0aGUgbG9jYWwgY2Fj aGUgYW5kIGVtdWxhdGUgL2V0Yy9ob3N0cworCWN0eC5ob3N0cygiL2V0Yy9ob3N0cyIpCisJaWYg cmVzb2x2Y29uZiBhbmQgbm90IG5vcmVzb2x2ZXI6CisJCWN0eC5yZXNvbHZjb25mKHJlc29sdmNv bmYpCisKKwlpZiBycnR5cGUgPT0gNTI6CisJCXJydHlwZXN0ciA9ICJUTFNBIgorCWVsc2U6CisJ CXJydHlwZXN0ciA9IHJydHlwZQorCWlmIHR5cGUocnJ0eXBlKSA9PSBzdHI6CisJCWlmICdSUl9U WVBFXycgKyBycnR5cGUgaW4gZGlyKHVuYm91bmQpOgorCQkJcnJ0eXBlID0gZ2V0YXR0cih1bmJv dW5kLCAnUlJfVFlQRV8nICsgcnJ0eXBlKQorCQllbHNlOgorCQkJcmFpc2UgRXhjZXB0aW9uKCdF cnJvcjogdW5rbm93biBSUiBUWVBFOiAlcy4nICUgcnJ0eXBlKQorCWVsaWYgdHlwZShycnR5cGUp ICE9IGludDoKKwkJcmFpc2UgRXhjZXB0aW9uKCdFcnJvcjogcnJ0eXBlIGluIHdyb25nIGZvcm1h dCwgbmVpdGhlciBpbnQgbm9yIHN0ci4nKQorCisJc3RhdHVzLCByZXN1bHQgPSBjdHgucmVzb2x2 ZShob3N0bmFtZSwgcnJ0eXBlPXJydHlwZSkKKwlpZiBzdGF0dXMgPT0gMCBhbmQgcmVzdWx0Lmhh dmVkYXRhOgorCQlpZiBub3QgcmVzdWx0LnNlY3VyZToKKwkJCWlmIHNlY3VyZToKKwkJCQlpZiBu b3Qgbm9yZXNvbHZlciBhbmQgcmVzb2x2Y29uZjoKKwkJCQkJcmV0dmFsID0gZ2V0UmVjb3Jkcyho b3N0bmFtZSwgcnJ0eXBlLCBzZWN1cmUsIFRydWUpCisJCQkJCXByaW50KCdXYXJuaW5nOiBpbml0 aWFsIHF1ZXJ5IHVzaW5nIHJlc29sdmVyIGNvbmZpZyBmaWxlIHdhcyBub3Qgc2VjdXJlICh0cnkg b3B0aW9uIC0tcmVzb2x2Y29uZj0iIikuJywgZmlsZT1zeXMuc3RkZXJyKQorCQkJCQlyZXNvbHZj b25mID0gTm9uZQorCQkJCQlyZXR1cm4gcmV0dmFsCisJCQkJIyBUaGUgZGF0YSBpcyBpbnNlY3Vy ZSBhbmQgYSBzZWN1cmUgbG9va3VwIHdhcyByZXF1ZXN0ZWQKKwkJCQlyYWlzZSBJbnNlY3VyZUxv b2t1cEV4Y2VwdGlvbignRXJyb3I6IEFuc3dlciB3YXMgbm90IEROU1NFQy1zZWN1cmUnKQorCQkJ ZWxzZToKKwkJCQlwcmludCgnV2FybmluZzogcXVlcnkgZGF0YSBpcyBub3Qgc2VjdXJlLicsIGZp bGU9c3lzLnN0ZGVycikKKwkJIyBJZiB3ZSBhcmUgaGVyZSB0aGUgZGF0YSB3YXMgZWl0aGVyIHNl Y3VyZSBvciBpbnNlY3VyZSBkYXRhIGlzIGFjY2VwdGVkCisJCXJldHVybiByZXN1bHQuZGF0YS5y YXcKKwllbHNlOgorCQlyYWlzZSBETlNMb29rdXBFcnJvcignVW5zdWNjZXNzZnVsIEROUyBsb29r dXAgb3Igbm8gZGF0YSByZXR1cm5lZCBmb3IgcnJ0eXBlICVzICglcykuJyAlIChycnR5cGVzdHIs IHJydHlwZSkpCisKKyMgaWRlbnRpY2FsIHRvIENvbm5lY3Rpb24uY29ubmVjdCgpIGV4Y2VwdCBm b3IgdGhlIGxhc3QgcGFyYW1ldGVyCitkZWYgc3NsU3RhcnRUTFNDb25uZWN0KGNvbm5lY3Rpb24s IGFkZHIsIHN0YXJ0dGxzPU5vbmUpOgorICAgICAgICBjb25uZWN0aW9uLnNvY2tldC5jb25uZWN0 KGFkZHIpCisgICAgICAgIGNvbm5lY3Rpb24uYWRkciA9IGFkZHIKKyAgICAgICAgaWYgc3RhcnR0 bHM6CisgICAgICAgICAgICAjIHByaW1pdGl2ZSBtZXRob2QsIG5vIGVycm9yIGNoZWNrcyB5ZXQK KyAgICAgICAgICAgIGlmIHN0YXJ0dGxzID09ICJzbXRwIjoKKyAgICAgICAgICAgICAgICBkYXRh ID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICAgICAgY29ubmVjdGlv bi5zb2NrZXQuc2VuZCgiRUhMTyBNMkNyeXB0b1xyXG4iLmVuY29kZSgnYXNjaWknKSkKKyAgICAg ICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAg ICAgICAgY29ubmVjdGlvbi5zb2NrZXQuc2VuZCgiU1RBUlRUTFNcclxuIi5lbmNvZGUoJ2FzY2lp JykpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQor ICAgICAgICAgICAgZWxpZiBzdGFydHRscyA9PSAiaW1hcCI6CisgICAgICAgICAgICAgICAgZGF0 YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQorICAgICAgICAgICAgICAgIGNvbm5lY3Rp b24uc29ja2V0LnNlbmQoIi4gU1RBUlRUTFNcclxuIi5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAg ICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQorICAgICAgICAgICAg ZWxpZiBzdGFydHRscyA9PSAiZnRwIjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlv bi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zb2NrZXQuc2Vu ZCgiQVVUSCBUTFNcclxuIi5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICAgICAgZGF0YSA9 IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQorICAgICAgICAgICAgZWxpZiBzdGFydHRscyA9 PSAicG9wMyI6CisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3Yo NTAwKQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc29ja2V0LnNlbmQoIlNUTFNcclxuIi5l bmNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0 LnJlY3YoNTAwKQorICAgICAgICBjb25uZWN0aW9uLnNldHVwX3NzbCgpCisgICAgICAgIGNvbm5l Y3Rpb24uc2V0X2Nvbm5lY3Rfc3RhdGUoKQorICAgICAgICByZXQgPSBjb25uZWN0aW9uLmNvbm5l Y3Rfc3NsKCkKKyAgICAgICAgY2hlY2sgPSBnZXRhdHRyKGNvbm5lY3Rpb24sICdwb3N0Q29ubmVj dGlvbkNoZWNrJywgY29ubmVjdGlvbi5jbGllbnRQb3N0Q29ubmVjdGlvbkNoZWNrKQorICAgICAg ICBpZiBjaGVjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBjaGVjayhjb25uZWN0 aW9uLmdldF9wZWVyX2NlcnQoKSwgY29ubmVjdGlvbi5hZGRyWzBdKToKKyAgICAgICAgICAgICAg ICByYWlzZSBDaGVja2VyLlNTTFZlcmlmaWNhdGlvbkVycm9yKCdwb3N0IGNvbm5lY3Rpb24gY2hl Y2sgZmFpbGVkJykKKyAgICAgICAgcmV0dXJuIHJldAorCitkZWYgZ2V0SGFzaChjZXJ0aWZpY2F0 ZSwgbXR5cGUpOgorCSIiIkhhc2hlcyB0aGUgY2VydGlmaWNhdGUgYmFzZWQgb24gdGhlIG10eXBl LgorCVRoZSBjZXJ0aWZpY2F0ZSBzaG91bGQgYmUgYW4gTTJDcnlwdG8uWDUwOS5YNTA5IG9iamVj dCAob3IgdGhlIHJlc3VsdCBvZiB0aGUgZ2V0X3B1YmtleSgpIGZ1bmN0aW9uIG9uIHNhaWQgb2Jq ZWN0KQorCSIiIgorCWNlcnRpZmljYXRlID0gY2VydGlmaWNhdGUuYXNfZGVyKCkKKwlpZiBtdHlw ZSA9PSAwOgorCQlyZXR1cm4gY2VydGlmaWNhdGUuaGV4KCkKKwllbGlmIG10eXBlID09IDE6CisJ CXJldHVybiBzaGEyNTYoY2VydGlmaWNhdGUpLmhleGRpZ2VzdCgpCisJZWxpZiBtdHlwZSA9PSAy OgorCQlyZXR1cm4gc2hhNTEyKGNlcnRpZmljYXRlKS5oZXhkaWdlc3QoKQorCWVsc2U6CisJCXJh aXNlIEV4Y2VwdGlvbignbXR5cGUgc2hvdWxkIGJlIDAsMSwyJykKKworZGVmIGdldFRMU0EoaG9z dG5hbWUsIHBvcnQ9NDQzLCBwcm90b2NvbD0ndGNwJywgc2VjdXJlPVRydWUpOgorCSIiIgorCVRo aXMgZnVuY3Rpb24gdHJpZXMgdG8gZG8gYSBzZWN1cmUgbG9va3VwIG9mIHRoZSBUTFNBIHJlY29y ZC4KKwlBdCB0aGUgbW9tZW50IGl0IHJlcXVlc3RzIHRoZSBUWVBFNTIgcmVjb3JkIGFuZCBwYXJz ZXMgaXQgaW50byBhICd2YWxpZCcgVExTQSByZWNvcmQKKwlJdCByZXR1cm5zIGEgbGlzdCBvZiBU TFNBUmVjb3JkIG9iamVjdHMKKwkiIiIKKwlpZiBob3N0bmFtZVstMV0gIT0gJy4nOgorCQlob3N0 bmFtZSArPSAnLicKKworCWlmIG5vdCBwcm90b2NvbC5sb3dlcigpIGluIFsndGNwJywgJ3VkcCcs ICdzY3RwJ106CisJCXJhaXNlIEV4Y2VwdGlvbignRXJyb3I6IHVua25vd24gcHJvdG9jb2w6ICVz LiBTaG91bGQgYmUgb25lIG9mIHRjcCwgdWRwIG9yIHNjdHAnICUgcHJvdG9jb2wpCisJdHJ5Ogor CQlpZiBwb3J0ID09ICcqJzoKKwkJCXJlY29yZHMgPSBnZXRSZWNvcmRzKCcqLl8lcy4lcycgJSAo cHJvdG9jb2wubG93ZXIoKSwgaG9zdG5hbWUpLCBycnR5cGU9NTIsIHNlY3VyZT1zZWN1cmUpCisJ CWVsc2U6CisJCQlyZWNvcmRzID0gZ2V0UmVjb3JkcygnXyVzLl8lcy4lcycgJSAocG9ydCwgcHJv dG9jb2wubG93ZXIoKSwgaG9zdG5hbWUpLCBycnR5cGU9NTIsIHNlY3VyZT1zZWN1cmUpCisJZXhj ZXB0IEluc2VjdXJlTG9va3VwRXhjZXB0aW9uIGFzIGU6CisJCXByaW50KHN0cihlKSkKKwkJc3lz LmV4aXQoMSkKKwlleGNlcHQgRE5TTG9va3VwRXJyb3IgYXMgZToKKwkJcHJpbnQoJ1VuYWJsZSB0 byByZXNvbHZlICVzOiAlcycgJSAoaG9zdG5hbWUsIHN0cihlKSkpCisJCXN5cy5leGl0KDEpCisJ cmV0ID0gW10KKwlmb3IgcmVjb3JkIGluIHJlY29yZHM6CisJCWhleGRhdGEgPSBiMmFfaGV4KHJl Y29yZCkKKwkJaWYgcG9ydCA9PSAnKic6CisJCQlyZXQuYXBwZW5kKFRMU0FSZWNvcmQoJyouXyVz LiVzJyAlIChwcm90b2NvbC5sb3dlcigpLCBob3N0bmFtZSksIGludChoZXhkYXRhWzA6Ml0sMTYp LCBpbnQoaGV4ZGF0YVsyOjRdLDE2KSwgaW50KGhleGRhdGFbNDo2XSwxNiksIGhleGRhdGFbNjpd LmRlY29kZSgnYXNjaWknKSkpCisJCWVsc2U6CisJCQlyZXQuYXBwZW5kKFRMU0FSZWNvcmQoJ18l cy5fJXMuJXMnICUgKHBvcnQsIHByb3RvY29sLmxvd2VyKCksIGhvc3RuYW1lKSwgaW50KGhleGRh dGFbMDoyXSwxNiksIGludChoZXhkYXRhWzI6NF0sMTYpLCBpbnQoaGV4ZGF0YVs0OjZdLDE2KSwg aGV4ZGF0YVs2Ol0uZGVjb2RlKCdhc2NpaScpKSkKKwlyZXR1cm4gcmV0CisKK2RlZiB2ZXJpZnlD ZXJ0TWF0Y2gocmVjb3JkLCBjZXJ0KToKKwkiIiIKKwlWZXJpZnkgdGhlIGNlcnRpZmljYXRlIHdp dGggdGhlIHJlY29yZC4KKwlyZWNvcmQgc2hvdWxkIGJlIGEgVExTQVJlY29yZCBhbmQgY2VydCBz aG91bGQgYmUgYSBNMkNyeXB0by5YNTA5Llg1MDkKKwkiIiIKKwlpZiBub3QgaXNpbnN0YW5jZShj ZXJ0LCBYNTA5Llg1MDkpOgorCQlyZXR1cm4KKwlpZiBub3QgaXNpbnN0YW5jZShyZWNvcmQsIFRM U0FSZWNvcmQpOgorCQlyZXR1cm4KKworCWlmIHJlY29yZC5zZWxlY3RvciA9PSAxOgorCQljZXJ0 aGFzaCA9IGdldEhhc2goY2VydC5nZXRfcHVia2V5KCksIHJlY29yZC5tdHlwZSkKKwllbHNlOgor CQljZXJ0aGFzaCA9IGdldEhhc2goY2VydCwgcmVjb3JkLm10eXBlKQorCisJaWYgbm90IGNlcnRo YXNoOgorCQlyZXR1cm4KKworCWlmIGNlcnRoYXNoID09IHJlY29yZC5jZXJ0OgorCQlyZXR1cm4g VHJ1ZQorCWVsc2U6CisJCXJldHVybiBGYWxzZQorCitkZWYgdmVyaWZ5Q2VydE5hbWVXaXRoSG9z dE5hbWUoY2VydCwgaG9zdG5hbWUsIHdpdGhfbXNnPUZhbHNlKToKKwkiIiJWZXJpZnkgdGhlIG5h bWUgb24gdGhlIGNlcnRpZmljYXRlIHdpdGggYSBob3N0bmFtZSwgd2UgbmVlZCB0aGlzIGJlY2F1 c2Ugd2UgZ2V0IHRoZSBjZXJ0IGJhc2VkIG9uIElQIGFkZHJlc3MgYW5kIHRodXNseSBjYW5ub3Qg cmVseSBvbiBNMkNyeXB0byB0byB2ZXJpZnkgdGhpcyIiIgorCWlmIG5vdCBpc2luc3RhbmNlKGNl cnQsIFg1MDkuWDUwOSk6CisJCXJldHVybgorCWlmIG5vdCBpc2luc3RhbmNlKGhvc3RuYW1lLCBz dHIpOgorCQlyZXR1cm4KKworCWlmIGhvc3RuYW1lWy0xXSA9PSAnLic6CisJCWhvc3RuYW1lID0g aG9zdG5hbWVbMDotMV0KKwlob3N0bmFtZSA9IGhvc3RuYW1lLmxvd2VyKCkKKworCWNlcnRuYW1l cyA9IFtdCisJZm9yIGVudHJ5IGluIHN0cihjZXJ0LmdldF9zdWJqZWN0KCkpLmxvd2VyKCkuc3Bs aXQoIi8iKToKKwkJaWYgZW50cnkuc3RhcnRzd2l0aCgiY249Iik6CisJCQljZXJ0bmFtZXMuYXBw ZW5kKGVudHJ5WzM6XSkKKwl0cnk6CisJCWZvciB2YWx1ZSBpbiByZS5zcGxpdCgiLCA/IiwgY2Vy dC5nZXRfZXh0KCdzdWJqZWN0QWx0TmFtZScpLmdldF92YWx1ZSgpLmxvd2VyKCkpOgorCQkJaWYg dmFsdWUuc3RhcnRzd2l0aCgiZG5zOiIpOgorCQkJCWNlcnRuYW1lcy5hcHBlbmQodmFsdWVbNDpd KQorCWV4Y2VwdDoKKwkJcGFzcworCWlmIGhvc3RuYW1lIGluIGNlcnRuYW1lczoKKwkJcmV0dXJu IFRydWUKKwlmb3IgY2VydG5hbWUgaW4gY2VydG5hbWVzOgorCQlpZiBjZXJ0bmFtZVswXSA9PSAn KicgYW5kIGhvc3RuYW1lLmVuZHN3aXRoKGNlcnRuYW1lWzE6XSk6CisJCQlyZXR1cm4gVHJ1ZQor CisJaWYgd2l0aF9tc2c6CisJCXByaW50KCdXQVJOSU5HOiBOYW1lIG9uIHRoZSBjZXJ0aWZpY2F0 ZSAoU3ViamVjdDogJXMsIFN1YmplY3RBbHROYW1lOiAlcykgZG9lc25cJ3QgbWF0Y2ggcmVxdWVz dGVkIGhvc3RuYW1lICglcykuJyAlIChzdHIoY2VydC5nZXRfc3ViamVjdCgpKSwgY2VydC5nZXRf ZXh0KCdzdWJqZWN0QWx0TmFtZScpLmdldF92YWx1ZSgpLCBob3N0bmFtZSkpCisJcmV0dXJuIEZh bHNlCisKK2RlZiBjaGVja0NoYWluTGluayhjaGFpbiwgcmVjb3JkPU5vbmUpOgorCXByZXZpb3Vz X2lzc3VlciA9IE5vbmUKKwljaGFpbmVkID0gVHJ1ZQorCW1hdGNoZWQgPSBOb25lCisJZm9yIGNl cnQgaW4gY2hhaW46CisJCWlmIHByZXZpb3VzX2lzc3VlcjoKKwkJCWlmIG5vdCBzdHIocHJldmlv dXNfaXNzdWVyKSA9PSBzdHIoY2VydC5nZXRfc3ViamVjdCgpKTogIyBUaGUgY2hhaW4gY2Fubm90 IGJlIHZhbGlkCisJCQkJY2hhaW5lZCA9IEZhbHNlCisJCQkJYnJlYWsKKwkJcHJldmlvdXNfaXNz dWVyID0gY2VydC5nZXRfaXNzdWVyKCkKKwkJaWYgcmVjb3JkIGFuZCB2ZXJpZnlDZXJ0TWF0Y2go cmVjb3JkLCBjZXJ0KToKKwkJCW1hdGNoZWQgPSBjZXJ0CisJcmV0dXJuIGNoYWluZWQsIG1hdGNo ZWQKKworZGVmIGdldExvY2FsQ2hhaW4oZmlsZW5hbWUsIGRlYnVnKToKKwkiIiJSZXR1cm5zIGxp c3Qgb2YgTTJDcnlwdG8uWDUwOS5YNTA5IG9iamVjdHMgYW5kIHZlcmlmaWNhdGlvbiByZXN1bHQi IiIKKwljaGFpbiA9IFtdCisJYmlvID0gQklPLm9wZW5maWxlKGZpbGVuYW1lKQorCUVyciA9IE5v bmUKKwl3aGlsZSBUcnVlOgorCQl0cnk6CisJCQljcHRyID0gbTIueDUwOV9yZWFkX3BlbShiaW8u X3B0cigpKQorCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQlFcnIgPSBlCisJCQlicmVhazsK KwkJaWYgbm90IGNwdHI6CisJCQlicmVhaworCQljaGFpbi5hcHBlbmQoWDUwOS5YNTA5KGNwdHIs IF9weWZyZWU9MSkpCisJaWYgbm90IGNoYWluOgorCQlpZiBFcnI6CisJCQlyYWlzZQorCQllbHNl OgorCQkJcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9hZCAlcyIgJSBmaWxlbmFtZSkKKwkj IEZJWE1FIC0gaXMgdGhpcyBwb3NzaWJsZSB1c2luZyB0aGUgbGlicmFyeSAod2l0aG91dCBhIGNh bGwgdG8gb3BlbnNzbCB0b29sKT8KKwljbWQgPSBbIm9wZW5zc2wiLCAidmVyaWZ5IiwgZmlsZW5h bWVdCisJcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q SVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorCShzdGRvdXQsIHN0ZGVycikgPSBwcm9jZXNz LmNvbW11bmljYXRlKCkKKwlpZiBkZWJ1ZzoKKwkJcHJpbnQoc3RkZXJyLCBmaWxlPXN5cy5zdGRl cnIpCisJaWYgc3Rkb3V0LmVuZHN3aXRoKGIiT0tcbiIpOgorCQl2ZXJpZnlfcmVzdWx0ID0gMAor CWVsc2U6CisJCXZlcmlmeV9yZXN1bHQgPSAiJXMlcyIgJSAoc3Rkb3V0LCBzdGRlcnIpCisJcmV0 dXJuIGNoYWluLCB2ZXJpZnlfcmVzdWx0CisKK2RlZiB1c2FnZVRleHQodXNhZ2UpOgorCW5hbWVz ID0gWyJQS0lYLUNBIiwgIlBLSVgtRUUiLCAiREFORS1UQSIsICJEQU5FLUVFIl0KKwlyZXR1cm4g IlVzYWdlICVkIFslc10iICUgKHVzYWdlLCBuYW1lc1t1c2FnZV0pCisKK2RlZiB2ZXJpZnlDaGFp bihyZWNvcmQsIGNoYWluLCB2ZXJpZnlfcmVzdWx0LCBwcmVfZXhpdCwgbG9jYWwsIHNvdXJjZSk6 CisJc291cmNlID0gIiVzIGZvciAlcyIgJSAocmVjb3JkLmdldFNob3J0VGV4dCgpLCBzb3VyY2Up CisJaWYgbG9jYWw6CisJCXRleHRfY2VydCA9ICJMb2NhbCBjZXJ0aWZpY2F0ZSIKKwkJdGV4dF9j aGFpbiA9ICJjZXJ0aWZpY2F0ZSBpbiB0aGUgbG9jYWwgY2VydGlmaWNhdGUgY2hhaW4iCisJZWxz ZToKKwkJdGV4dF9jZXJ0ID0gIkNlcnRpZmljYXRlIG9mZmVyZWQgYnkgdGhlIHNlcnZlciIKKwkJ dGV4dF9jaGFpbiA9ICJjZXJ0aWZpY2F0ZSBpbiB0aGUgY2VydGlmaWNhdGUgY2hhaW4gb2ZmZXJl ZCBieSB0aGUgc2VydmVyIgorCisJaWYgbm90IHZlcmlmeUNlcnROYW1lV2l0aEhvc3ROYW1lKGNl cnQ9Y2hhaW5bMF0sIGhvc3RuYW1lPXN0cihhcmdzLmhvc3QpLCB3aXRoX21zZz1UcnVlKToKKwkJ IyBUaGUgbmFtZSBvbiB0aGUgY2VydCBkb2Vzbid0IG1hdGNoIHRoZSBob3N0bmFtZS4uLiB3ZSBk b24ndCB2ZXJpZnkgdGhlIFRMU0EgcmVjb3JkCisJCXByaW50KCdDYXV0aW9uOiAlcyBkb2VzIG5v dCBtYXRjaCBob3N0bmFtZSAoJXMpJyAlICh0ZXh0X2NlcnQsIHNvdXJjZSkpCisJdXQgPSB1c2Fn ZVRleHQocmVjb3JkLnVzYWdlKQorCWlmIHJlY29yZC51c2FnZSA9PSAxOiAjIEVuZC1ob3N0IGNl cnQKKwkJY2hhaW5lZCwgbWF0Y2hlZCA9IGNoZWNrQ2hhaW5MaW5rKChjaGFpblswXSwpLCByZWNv cmQpCisJCWlmIG5vdCBjaGFpbmVkOgorCQkJcHJpbnQoIldBUk46IENlcnRpZmljYXRlcyBkb24n dCBjaGFpbiIpCisJCWlmIG1hdGNoZWQ6CisJCQlpZiB2ZXJpZnlfcmVzdWx0ID09IDA6ICMgVGhl IGNlcnQgY2hhaW5zIHRvIGEgdmFsaWQgQ0EgY2VydCBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbS1j ZXJ0aWZpY2F0ZXMKKwkJCQlwcmludCgnU1VDQ0VTUyAoJXMpOiAlcyBtYXRjaGVzIHRoZSBvbmUg bWVudGlvbmVkIGluIHRoZSBUTFNBIHJlY29yZCBhbmQgY2hhaW5zIHRvIGEgdmFsaWQgQ0EgY2Vy dGlmaWNhdGUgKCVzKScgJSAodXQsIHRleHRfY2VydCwgc291cmNlKSkKKwkJCWVsc2U6CisJCQkJ aWYgbG9jYWw6CisJCQkJCXJlYXNvbiA9IHZlcmlmeV9yZXN1bHQKKwkJCQllbHNlOgorCQkJCQly ZWFzb24gPSBnZXRWZXJpZmljYXRpb25FcnJvclJlYXNvbih2ZXJpZnlfcmVzdWx0KQorCQkJCXBy aW50KCdGQUlMICglcyk6ICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhlIFRMU0Eg cmVjb3JkIGJ1dCB0aGUgZm9sbG93aW5nIGVycm9yIHdhcyByYWlzZWQgZHVyaW5nIFBLSVggdmFs aWRhdGlvbiAoJXMpOiAlcycgJSAodXQsIHRleHRfY2VydCwgc291cmNlLCByZWFzb24pKQorCQkJ CWlmIHByZV9leGl0ID09IDA6IHByZV9leGl0ID0gMgorCQkJaWYgYXJncy5kZWJ1ZzogcHJpbnQo J1RoZSBtYXRjaGVkIGNlcnRpZmljYXRlIGhhcyBTdWJqZWN0OiAlcycgJSBjZXJ0LmdldF9zdWJq ZWN0KCkpCisJCWVsc2U6CisJCQlwcmludCgnRkFJTDogJXMgZG9lcyBub3QgbWF0Y2ggdGhlIFRM U0EgcmVjb3JkICglcyknICUgKHRleHRfY2VydCwgc291cmNlKSkKKwkJCWlmIHByZV9leGl0ID09 IDA6IHByZV9leGl0ID0gMgorCisJZWxpZiByZWNvcmQudXNhZ2UgPT0gMDogIyBDQSBjb25zdHJh aW50CisJCSMgRklYTUU6IERvZXMgbmVpdGhlciBoYW5kbGUgY2hhaW4gZGF0YSBpbiBmdWxsIGNl cnQgVExTQSByZWNvcmRzICh0eXBlIDApIGNvcnJlY3RseQorCQkjIG5vciBoYW5kbGVzIHNob3J0 IGNlcnRpZmljYXRpb24gY2hhaW5zCisJCSMgSW4gdGhlc2UgY2FzZSB0aGUgY2hhaW4gc2hvdWxk IGJlIGNvbXBsZXRlZCB3aXRoIG1pc3NpbmcgcmVjb3JkcyBlaXRoZXIKKwkJIyBmcm9tIFRMU0Eg b3IgbG9jYWwgY2VydGlmaWNhdGUgc3RvcmUKKworCQkjIFJlbW92ZSB0aGUgZmlyc3QgKD0gRW5k LUVudGl0eSBjZXJ0KSBmcm9tIHRoZSBjaGFpbgorCQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tD aGFpbkxpbmsoY2hhaW5bMTpdLCByZWNvcmQpCisJCWlmIG5vdCBjaGFpbmVkOgorCQkJcHJpbnQo IldBUk46IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCWlmIG1hdGNoZWQ6CisJCQlpZiBj ZXJ0LmNoZWNrX2NhKCk6CisJCQkJaWYgdmVyaWZ5X3Jlc3VsdCA9PSAwOgorCQkJCQlwcmludCgn U1VDQ0VTUyAoJXMpOiBBICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhlIFRMU0Eg cmVjb3JkIGFuZCBpcyBhIENBIGNlcnRpZmljYXRlICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBz b3VyY2UpKQorCQkJCWVsc2U6CisJCQkJCWlmIGxvY2FsOgorCQkJCQkJcmVhc29uID0gdmVyaWZ5 X3Jlc3VsdAorCQkJCQllbHNlOgorCQkJCQkJcmVhc29uID0gZ2V0VmVyaWZpY2F0aW9uRXJyb3JS ZWFzb24odmVyaWZ5X3Jlc3VsdCkKKwkJCQkJcHJpbnQoJ0ZBSUwgKCVzKTogQSAlcyBtYXRjaGVz IHRoZSBvbmUgbWVudGlvbmVkIGluIHRoZSBUTFNBIHJlY29yZCBhbmQgaXMgYSBDQSBjZXJ0aWZp Y2F0ZSwgYnV0IHRoZSBmb2xsb3dpbmcgZXJyb3Igd2FzIHJhaXNlZCBkdXJpbmcgUEtJWCB2YWxp ZGF0aW9uICglcyk6ICVzJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNlLCByZWFzb24pKQorCQkJ CQlpZiBwcmVfZXhpdCA9PSAwOiBwcmVfZXhpdCA9IDIKKwkJCWVsc2U6CisJCQkJcHJpbnQoJ0ZB SUwgKCVzKTogQSAlcyBtYXRjaGVzIHRoZSBvbmUgbWVudGlvbmVkIGluIHRoZSBUTFNBIHJlY29y ZCBidXQgaXMgbm90IGEgQ0EgY2VydGlmaWNhdGUgKCVzKScgJSAodXQsIHRleHRfY2hhaW4sIHNv dXJjZSkpCisJCQkJaWYgcHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisJCQlpZiBhcmdzLmRl YnVnOiBwcmludCgnVGhlIG1hdGNoZWQgY2VydGlmaWNhdGUgaGFzIFN1YmplY3Q6ICVzJyAlIGNl cnQuZ2V0X3N1YmplY3QoKSkKKwkJZWxzZToKKwkJCXByaW50KCdGQUlMICglcyk6IE5vICVzIG1h dGNoZXMgdGhlIFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UpKQor CQkJaWYgcHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisKKwllbGlmIHJlY29yZC51c2FnZSA9 PSAyOiAjIFVzYWdlIDIsIHVzZSB0aGUgY2VydCBpbiB0aGUgcmVjb3JkIGFzIHRydXN0IGFuY2hv cgorCQkjIEZJWE1FOiBEb2VzIG5vdCBoYW5kbGUgY2hhaW4gZGF0YSBpbiBmdWxsIGNlcnQgVExT QSByZWNvcmRzICh0eXBlIDApIGNvcnJlY3RseQorCQkjIEluIHRoaXMgY2FzZSB0aGUgY2hhaW4g c2hvdWxkIGJlIGNvbXBsZXRlZCB3aXRoIG1pc3NpbmcgcmVjb3JkcyBpZiBjaGFpbiBpcworCQkj IG5vdCBjb21wbGV0ZQorCQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tDaGFpbkxpbmsoY2hhaW4s IHJlY29yZCkKKwkJaWYgbWF0Y2hlZDoKKwkJCWlmIG5vdCBjaGFpbmVkOgorCQkJCXByaW50KCJX QVJOOiBDZXJ0aWZpY2F0ZXMgZG9uJ3QgY2hhaW4iKQorCQkJcHJpbnQoJ1NVQ0NFU1MgKCVzKTog QSAlcyAoaW5jbHVkaW5nIHRoZSBlbmQtZW50aXR5IGNlcnRpZmljYXRlKSBtYXRjaGVzIHRoZSBU TFNBIHJlY29yZCAoJXMpJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNlKSkKKwkJCWlmIGFyZ3Mu ZGVidWc6IHByaW50KCdUaGUgbWF0Y2hlZCBjZXJ0aWZpY2F0ZSBoYXMgU3ViamVjdDogJXMnICUg bWF0Y2hlZC5nZXRfc3ViamVjdCgpKQorCQllbHNlOgorCQkJaWYgbm90IGNoYWluZWQ6CisJCQkJ cHJpbnQoIkZBSUw6IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCQlwcmludCgnRkFJTCAo JXMpOiBObyAlcyAoaW5jbHVkaW5nIHRoZSBlbmQtZW50aXR5IGNlcnRpZmljYXRlKSBtYXRjaGVz IHRoZSBUTFNBIHJlY29yZCAoJXMpJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNlKSkKKwkJCWlm IHByZV9leGl0ID09IDA6IHByZV9leGl0ID0gMgorCisJZWxpZiByZWNvcmQudXNhZ2UgPT0gMzog IyBFRSBjZXJ0IE1VU1QgbWF0Y2gKKwkJY2hhaW5lZCwgbWF0Y2hlZCA9IGNoZWNrQ2hhaW5MaW5r KChjaGFpblswXSwpLCByZWNvcmQpCisJCWlmIG5vdCBjaGFpbmVkOgorCQkJcHJpbnQoIldBUk46 IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCWlmIG1hdGNoZWQ6CisJCQlwcmludCgnU1VD Q0VTUyAoJXMpOiAlcyBtYXRjaGVzIHRoZSBUTFNBIHJlY29yZCAoJXMpJyAlICh1dCwgdGV4dF9j ZXJ0LCBzb3VyY2UpKQorCQkJaWYgYXJncy5kZWJ1ZzogcHJpbnQoJ1RoZSBtYXRjaGVkIGNlcnRp ZmljYXRlIGhhcyBTdWJqZWN0OiAlcycgJSBjaGFpblswXS5nZXRfc3ViamVjdCgpKQorCQllbHNl OgorCQkJcHJpbnQoJ0ZBSUwgKCVzKTogJXMgZG9lcyBub3QgbWF0Y2ggdGhlIFRMU0EgcmVjb3Jk ICglcyknICUgKHV0LCB0ZXh0X2NlcnQsIHNvdXJjZSkpCisJCQlpZiBwcmVfZXhpdCA9PSAwOiBw cmVfZXhpdCA9IDIKKwlyZXR1cm4gcHJlX2V4aXQKKworY2xhc3MgVExTQVJlY29yZDoKKwkiIiJX aGVuIGluc3RhbmNpYXRlZCwgdGhpcyBjbGFzcyBjb250YWlucyBhbGwgdGhlIGZpZWxkcyBvZiBh IFRMU0EgcmVjb3JkLgorCSIiIgorCWRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1c2FnZSwgc2Vs ZWN0b3IsIG10eXBlLCBjZXJ0KToKKwkJciIiIm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFJSIGlu IHRoZSBmb3JtYXQ6IC9eKF9cZHsxLDV9fFwqKVwuXyh0Y3B8dWRwfHNjdHApXC4oW2EtejAtOV0q XC4pezIsfSQvCisJCXVzYWdlLCBzZWxlY3RvciBhbmQgbXR5cGUgc2hvdWxkIGJlIGFuIGludGVn ZXIKKwkJY2VydCBzaG91bGQgYmUgYSBoZXhpZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50aW5nIHRo ZSBjZXJ0aWZpY2F0ZSB0byBiZSBtYXRjaGVkIGZpZWxkCisJCSIiIgorCQl0cnk6CisJCQlzZWxm LnJydHlwZSA9IDUyICAgICMgVExTQSBwZXIgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVu dHMvZG5zLXBhcmFtZXRlcnMKKwkJCXNlbGYucnJjbGFzcyA9IDEgICAgIyBJTgorCQkJc2VsZi5u YW1lID0gc3RyKG5hbWUpCisJCQlzZWxmLnVzYWdlID0gaW50KHVzYWdlKQorCQkJc2VsZi5zZWxl Y3RvciA9IGludChzZWxlY3RvcikKKwkJCXNlbGYubXR5cGUgPSBpbnQobXR5cGUpCisJCQlzZWxm LmNlcnQgPSBjZXJ0CisJCWV4Y2VwdDoKKwkJCXJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCB2YWx1 ZSBwYXNzZWQsIHVuYWJsZSB0byBjcmVhdGUgYSBUTFNBUmVjb3JkJykKKworCWRlZiBnZXRSZWNv cmQoc2VsZiwgZ2VuZXJpYz1GYWxzZSk6CisJCSIiIlJldHVybnMgdGhlIFJSIHN0cmluZyBvZiB0 aGlzIFRMU0FSZWNvcmQsIGVpdGhlciBpbiByZmMgKGRlZmF1bHQpIG9yIGdlbmVyaWMgZm9ybWF0 IiIiCisJCWlmIGdlbmVyaWM6CisJCQlyZXR1cm4gciclcyBJTiBUWVBFNTIgXCMgJXMgJXMlcyVz JXMnICUgKHNlbGYubmFtZSwgKGxlbihzZWxmLmNlcnQpLy8yKSszICwgc2VsZi5fdG9IZXgoc2Vs Zi51c2FnZSksIHNlbGYuX3RvSGV4KHNlbGYuc2VsZWN0b3IpLCBzZWxmLl90b0hleChzZWxmLm10 eXBlKSwgc2VsZi5jZXJ0KQorCQlyZXR1cm4gJyVzIElOIFRMU0EgJXMgJXMgJXMgJXMnICUgKHNl bGYubmFtZSwgc2VsZi51c2FnZSwgc2VsZi5zZWxlY3Rvciwgc2VsZi5tdHlwZSwgc2VsZi5jZXJ0 KQorCisJZGVmIF90b0hleChzZWxmLCB2YWwpOgorCQkiIiJIZWxwZXIgZnVuY3Rpb24gdG8gY3Jl YXRlIGhleCBzdHJpbmdzIGZyb20gaW50ZWdlcnMiIiIKKwkJcmV0dXJuICIlMC4yeCIgJSB2YWwK KworCWRlZiBpc1ZhbGlkKHNlbGYsIHJhaXNlRXhjZXB0aW9uPUZhbHNlKToKKwkJIiIiQ2hlY2sg d2hldGhlciBhbGwgZmllbGRzIGluIHRoZSBUTFNBIHJlY29yZCBhcmUgY29uZm9ybWluZyB0byB0 aGUgc3BlYyBhbmQgY2hlY2sgaWYgdGhlIHBvcnQsIHByb3RvY29sIGFuZCBuYW1lIGFyZSBnb29k IiIiCisJCWVyciA9W10KKwkJdHJ5OgorCQkJaWYgbm90IDEgPD0gaW50KHNlbGYuZ2V0UG9ydCgp KSA8PSA2NTUzNToKKwkJCQllcnIuYXBwZW5kKCdQb3J0ICVzIG5vdCB3aXRoaW4gY29ycmVjdCBy YW5nZSAoMSA8PSBwb3J0IDw9IDY1NTM1KScgJSBzZWxmLmdldFBvcnQoKSkKKwkJZXhjZXB0Ogor CQkJaWYgc2VsZi5nZXRQb3J0KCkgIT0gJyonOgorCQkJCWVyci5hcHBlbmQoJ1BvcnQgJXMgbm90 IGEgbnVtYmVyJyAlIHNlbGYuZ2V0UG9ydCgpKQorCQlpZiBub3Qgc2VsZi51c2FnZSBpbiBbMCwx LDIsM106CisJCQllcnIuYXBwZW5kKCdVc2FnZTogaW52YWxpZCAoJXMgaXMgbm90IG9uZSBvZiAw IFtQS0lYLUNBXSwgMSBbUEtJWC1FRV0sIDIgW0RBTkUtVEFdIG9yIDMgW0RBTkUtRUVdKScgJSBz ZWxmLnVzYWdlKQorCQlpZiBub3Qgc2VsZi5zZWxlY3RvciBpbiBbMCwxXToKKwkJCWVyci5hcHBl bmQoJ1NlbGVjdG9yOiBpbnZhbGlkICglcyBpcyBub3Qgb25lIG9mIDAgW0NlcnRdIG9yIDEgW1NQ S0ldKScgJSBzZWxmLnNlbGVjdG9yKQorCQlpZiBub3Qgc2VsZi5tdHlwZSBpbiBbMCwxLDJdOgor CQkJZXJyLmFwcGVuZCgnTWF0Y2hpbmcgVHlwZTogaW52YWxpZCAoJXMgaXMgbm90IG9uZSBvZiAw IFtGVUxMXSwgMSBbU0hBLTI1Nl0gb3IgMiBbU0hBLTUxMl0pJyAlIHNlbGYubXR5cGUpCisJCWlm IG5vdCBzZWxmLmlzTmFtZVZhbGlkKCk6CisJCQllcnIuYXBwZW5kKCdOYW1lICglcykgaXMgbm90 IGluIHRoZSBjb3JyZWN0IGZvcm1hdDogX3BvcnRudW1iZXIuX3RyYW5zcG9ydHByb3RvY29sLmhv c3RuYW1lLmRvbS4nICUgc2VsZi5uYW1lKQorCQkjIEEgY2VydGlmaWNhdGUgbGVuZ3RoIG9mIDAg aXMgYWNjZXB0ZWQKKwkJaWYgc2VsZi5tdHlwZSBpbiBbMSwyXSBhbmQgbGVuKHNlbGYuY2VydCkg IT0gMDoKKwkJCWlmIG5vdCBsZW4oc2VsZi5jZXJ0KSA9PSB7MTo2NCwyOjEyOH1bc2VsZi5tdHlw ZV06CisJCQkJZXJyLmFwcGVuZCgnQ2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uOiBpbnZhbGlk IChIYXNoIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBoYXNoLXR5cGUgaW4gTWF0Y2hpbmcgVHlwZSgl cykpJyAlIHsxOidTSEEtMjU2JywyOidTSEEtNTEyJ31bc2VsZi5tdHlwZV0pCisJCWlmIGxlbihl cnIpICE9IDA6CisJCQlpZiBub3QgcmFpc2VFeGNlcHRpb246CisJCQkJcmV0dXJuIEZhbHNlCisJ CQllbHNlOgorCQkJCW1zZyA9ICdUaGUgVExTQSByZWNvcmQgaXMgaW52YWxpZC4nCisJCQkJZm9y IGVycm9yIGluIGVycjoKKwkJCQkJbXNnICs9ICdcblx0JXMnICUgZXJyb3IKKwkJCQlyYWlzZSBS ZWNvcmRWYWxpZGl0eUV4Y2VwdGlvbihtc2cpCisJCWVsc2U6CisJCQlyZXR1cm4gVHJ1ZQorCisJ ZGVmIGlzTmFtZVZhbGlkKHNlbGYpOgorCQkiIiJDaGVjayBpZiB0aGUgbmFtZSBpZiBpbiB0aGUg Y29ycmVjdCBmb3JtYXQiIiIKKwkJaWYgbm90IHJlLm1hdGNoKHInXihfXGR7MSw1fXxcKilcLl8o dGNwfHVkcHxzY3RwKVwuKFstYS16MC05XSpcLil7Mix9JCcsIHNlbGYubmFtZSk6CisJCQlyZXR1 cm4gRmFsc2UKKwkJcmV0dXJuIFRydWUKKworCWRlZiBnZXRQcm90b2NvbChzZWxmKToKKwkJIiIi UmV0dXJucyB0aGUgcHJvdG9jb2wgYmFzZWQgb24gdGhlIG5hbWUiIiIKKwkJcmV0dXJuIHJlLnNw bGl0KHInXC4nLCBzZWxmLm5hbWUpWzFdWzE6XQorCisJZGVmIGdldFBvcnQoc2VsZik6CisJCSIi IlJldHVybnMgdGhlIHBvcnQgYmFzZWQgb24gdGhlIG5hbWUiIiIKKwkJaWYgcmUuc3BsaXQocidc LicsIHNlbGYubmFtZSlbMF1bMF0gPT0gJyonOgorCQkJcmV0dXJuICcqJworCQllbHNlOgorCQkJ cmV0dXJuIHJlLnNwbGl0KHInXC4nLCBzZWxmLm5hbWUpWzBdWzE6XQorCisJZGVmIGdldFNob3J0 VGV4dChzZWxmKToKKwkJcmV0dXJuICIlZCAlZCAlZCAlLjhzLi4uIiAlIChzZWxmLnVzYWdlLCBz ZWxmLnNlbGVjdG9yLCBzZWxmLm10eXBlLCBzZWxmLmNlcnQpCisKK2NsYXNzIEFSZWNvcmQ6CisJ IiIiQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhbiBBIFJlY29yZCAoSVB2NCBhZGRyZXNzKSIiIgor CWRlZiBfX2luaXRfXyhzZWxmLCBob3N0bmFtZSwgYWRkcmVzcyk6CisJCXNlbGYucnJ0eXBlID0g MQorCQlzZWxmLmhvc3RuYW1lID0gaG9zdG5hbWUKKwkJc2VsZi5hZGRyZXNzID0gYWRkcmVzcwor CisJZGVmIF9fc3RyX18oc2VsZik6CisJCXJldHVybiBzZWxmLmFkZHJlc3MKKworCWRlZiBpc1Zh bGlkKHNlbGYpOgorCQl0cnk6CisJCQlJUHY0QWRkcmVzcyhzZWxmLmFkZHJlc3MpCisJCQlyZXR1 cm4gVHJ1ZQorCQlleGNlcHQ6CisJCQlyZXR1cm4gRmFsc2UKKworY2xhc3MgQUFBQVJlY29yZDoK KwkiIiJBbiBvYmplY3QgcmVwcmVzZW50aW5nIGFuIEFBQUEgUmVjb3JkIChJUHY2IGFkZHJlc3Mp IiIiCisJZGVmIF9faW5pdF9fKHNlbGYsIGhvc3RuYW1lLCBhZGRyZXNzKToKKwkJc2VsZi5ycnR5 cGUgPSAyOAorCQlzZWxmLmhvc3RuYW1lID0gaG9zdG5hbWUKKwkJc2VsZi5hZGRyZXNzID0gYWRk cmVzcworCisJZGVmIF9fc3RyX18oc2VsZik6CisJCXJldHVybiBzZWxmLmFkZHJlc3MKKworCWRl ZiBpc1ZhbGlkKHNlbGYpOgorCQl0cnk6CisJCQlJUHY2QWRkcmVzcyhzZWxmLmFkZHJlc3MpCisJ CQlyZXR1cm4gVHJ1ZQorCQlleGNlcHQ6CisJCQlyZXR1cm4gRmFsc2UKKworIyBFeGNlcHRpb25z CitjbGFzcyBSZWNvcmRWYWxpZGl0eUV4Y2VwdGlvbihFeGNlcHRpb24pOgorCXBhc3MKKworY2xh c3MgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24oRXhjZXB0aW9uKToKKwlwYXNzCisKK2NsYXNzIERO U0xvb2t1cEVycm9yKEV4Y2VwdGlvbik6CisJcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu X18nOgorCWltcG9ydCBhcmdwYXJzZQorCSMgY3JlYXRlIHRoZSBwYXJzZXIKKwlwYXJzZXIgPSBh cmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nQ3JlYXRlIGFuZCB2ZXJpZnkgVExT QSByZWNvcmRzLicsIGVwaWxvZz0nRm9yIGJ1Z3MuIHNlZSB0bHNhQG5vaGF0cy5jYScpCisKKwkj IENhdmVhdDogRm9yIFRMU0EgdmFsaWRhdGlvbiwgdGhpcyBwcm9ncmFtIGNoYXNlcyB0aHJvdWdo IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiBvZmZlcmVkIGJ5IHRoZSBzZXJ2ZXIsIG5vdCBpdHMgbG9j YWwgY2VydGlmaWNhdGVzLicKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcmlmeScsJy12Jywg YWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nVmVyaWZ5IGEgVExTQSByZWNvcmQsIGV4aXQgMCB3 aGVuIGFsbCBUTFNBIHJlY29yZHMgYXJlIG1hdGNoZWQsIGV4aXQgMiB3aGVuIGEgcmVjb3JkIGRv ZXMgbm90IG1hdGNoIHRoZSByZWNlaXZlZCBjZXJ0aWZpY2F0ZSwgZXhpdCAxIG9uIGVycm9yLicp CisKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNyZWF0ZScsJy1jJywgYWN0aW9uPSdzdG9yZV90 cnVlJywgaGVscD0nQ3JlYXRlIGEgVExTQSByZWNvcmQnKQorCXBhcnNlci5hZGRfYXJndW1lbnQo Jy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249J3Rsc2EgdmVyc2lvbjogJXMn JVZFUlNJT04sIGhlbHA9J3Nob3cgdmVyc2lvbiBhbmQgZXhpdCcpCisKKwlwYXJzZXIuYWRkX2Fy Z3VtZW50KCctNCcsICctLWlwdjQnLCBkZXN0PSdpcHY0JywgYWN0aW9uPSdzdG9yZV90cnVlJyxo ZWxwPSd1c2UgaXB2NCBuZXR3b3JraW5nIG9ubHknKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy02 JywgJy0taXB2NicsIGRlc3Q9J2lwdjYnLCBhY3Rpb249J3N0b3JlX3RydWUnLGhlbHA9J3VzZSBp cHY2IG5ldHdvcmtpbmcgb25seScpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pbnNlY3VyZScs IGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J0FsbG93IHVzZSBvZiBu b24tZG5zc2VjIHNlY3VyZWQgYW5zd2VycycpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXNv bHZjb25mJywgbWV0YXZhcj0nL1BBVEgvVE8vUkVTT0xWLkNPTkYnLCBhY3Rpb249J3N0b3JlJywg ZGVmYXVsdD0nL2V0Yy9yZXNvbHYuY29uZicsIGhlbHA9J1VzZSBhIHJlY3Vyc2l2ZSByZXNvbHZl ciBsaXN0ZWQgaW4gYSByZXNvbHYuY29uZiBmaWxlIChkZWZhdWx0OiAvZXRjL3Jlc29sdi5jb25m KScpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnaG9zdCcsIG1ldGF2YXI9Imhvc3RuYW1lIikKKwor CXBhcnNlci5hZGRfYXJndW1lbnQoJy0tcG9ydCcsICctcCcsIGFjdGlvbj0nc3RvcmUnLCBkZWZh dWx0PSc0NDMnLCBoZWxwPSdUaGUgcG9ydCwgb3IgXCcqXCcgd2hlcmUgcnVubmluZyBUTFMgaXMg bG9jYXRlZCAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgn LS1zdGFydHRscycsICctdCcsIGFjdGlvbj0nc3RvcmUnLCBjaG9pY2VzPVsnbm8nLCAnc210cCcs ICdpbWFwJywgJ3BvcDMnLCAnZnRwJ10sIGhlbHA9J1Byb3RvY29sIG5lZWRzIHNwZWNpYWwgc3Rh cnQgcHJvY2VkdXJlLCByZXF1aXJlcyBwcm90b2NvbCBuYW1lLicpCisJcGFyc2VyLmFkZF9hcmd1 bWVudCgnLS1wcm90b2NvbCcsIGFjdGlvbj0nc3RvcmUnLCBjaG9pY2VzPVsndGNwJywndWRwJywn c2N0cCddLCBkZWZhdWx0PSd0Y3AnLCBoZWxwPSdUaGUgcHJvdG9jb2wgdGhlIFRMUyBzZXJ2aWNl IGlzIHVzaW5nIChkZWZhdWx0OiAlKGRlZmF1bHQpcykuJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50 KCctLW9ubHktcnInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdPbmx5IHZlcmlmeSB0aGF0 IHRoZSBUTFNBIHJlc291cmNlIHJlY29yZCBpcyBjb3JyZWN0IChkbyBub3QgY2hlY2sgY2VydGlm aWNhdGUpJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJvb3RrZXknLCBtZXRhdmFyPScvUEFU SC9UTy9ST09ULktFWScsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPSdTcGVjaWZ5IGZpbGUgbG9jYXRp b24gY29udGFpbmluZyB0aGUgRE5TU0VDIHJvb3Qga2V5JykKKworCWlmIG9zLnBhdGguaXNkaXIo Ii9ldGMvcGtpL3Rscy9jZXJ0cy8iKToKKwkJY2FkaXIgPSAiL2V0Yy9wa2kvdGxzL2NlcnRzLyIK KwllbGlmIG9zLnBhdGguaXNkaXIoIi9ldGMvc3NsL2NlcnRzLyIpOgorCQljYWRpciA9ICIvZXRj L3NzbC9jZXJ0cy8iCisJZWxzZToKKwkJY2FkaXIgPSAiLiIKKwkJcHJpbnQgKCJ3YXJuaW5nOiBu byBzeXN0ZW0gd2lkZSBDQWRpciBmb3VuZCwgdXNpbmcgY3VycmVudCBkaXJlY3RvcnkiKQorCisJ cGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jYS1jZXJ0JywgbWV0YXZhcj0nL1BBVEgvVE8vQ0VSVFNU T1JFJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQgPSBjYWRpciwgaGVscD0nUGF0aCB0byBhIENB IGNlcnRpZmljYXRlIG9yIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlcyAo ZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRlYnVnJywg Jy1kJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nUHJpbnQgZGV0YWlscyBwbHVzIHRoZSBy ZXN1bHQgb2YgdGhlIHZhbGlkYXRpb24nKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tcXVpZXQn LCAnLXEnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdJZ25vcmVkIGZvciBiYWNrd2FyZHMg Y29tcGF0aWJpbGl0eScpCisKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNlcnRpZmljYXRlJywg aGVscD0nVGhlIGNlcnRpZmljYXRlIHVzZWQgZm9yIHRoZSBob3N0LiBJZiBjZXJ0aWZpY2F0ZSBp cyBlbXB0eSwgdGhlIGNlcnRpZmljYXRlIHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tIHRoZSBzZXJ2 ZXInKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0JywgJy1vJywgYWN0aW9uPSdzdG9y ZScsIGRlZmF1bHQ9J3JmYycsIGNob2ljZXM9WydnZW5lcmljJywncmZjJywnYm90aCddLCBoZWxw PSdUaGUgdHlwZSBvZiBvdXRwdXQuIEdlbmVyaWMgKFJGQyAzNTk3LCBUWVBFNTIpLCBSRkMgKFRM U0EpIG9yIGJvdGggKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCisJIyBVc2FnZSBvZiB0aGUg Y2VydGlmaWNhdGUKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXVzYWdlJywgJy11JywgYWN0aW9u PSdzdG9yZScsIHR5cGU9aW50LCBkZWZhdWx0PTMsIGNob2ljZXM9WzAsMSwyLDNdLCBoZWxwPSdU aGUgVXNhZ2Ugb2YgdGhlIENlcnRpZmljYXRlIGZvciBBc3NvY2lhdGlvbi4gXCcwXCcgZm9yIENB IFtQS0lYLUNBXSwgXCcxXCcgZm9yIEVuZCBFbnRpdHkgW1BLSVgtRUVdLCBcJzJcJyBmb3IgdHJ1 c3QtYW5jaG9yIFtEQU5FLVRBXSwgXCczXCcgZm9yIE9OTFkgRW5kLUVudGl0eSBtYXRjaCBbREFO RS1FRV0gKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0t c2VsZWN0b3InLCAnLXMnLCBhY3Rpb249J3N0b3JlJywgdHlwZT1pbnQsIGRlZmF1bHQ9MCwgY2hv aWNlcz1bMCwxXSwgaGVscD0nVGhlIFNlbGVjdG9yIGZvciB0aGUgQ2VydGlmaWNhdGUgZm9yIEFz c29jaWF0aW9uLiBcJzBcJyBmb3IgRnVsbCBDZXJ0aWZpY2F0ZSBbQ2VydF0sIFwnMVwnIGZvciBT dWJqZWN0UHVibGljS2V5SW5mbyBbU1BLSV0gKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCXBh cnNlci5hZGRfYXJndW1lbnQoJy0tbXR5cGUnLCAnLW0nLCBhY3Rpb249J3N0b3JlJywgdHlwZT1p bnQsIGRlZmF1bHQ9MSwgY2hvaWNlcz1bMCwxLDJdLCBoZWxwPSdUaGUgTWF0Y2hpbmcgVHlwZSBv ZiB0aGUgQ2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uLiBcJzBcJyBmb3IgRXhhY3QgbWF0Y2gs IFwnMVwnIGZvciBTSEEtMjU2IGhhc2gsIFwnMlwnIGZvciBTSEEtNTEyIChkZWZhdWx0OiAlKGRl ZmF1bHQpcykuJykKKworCWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKwlpZiBhcmdzLnJv b3RrZXk6CisJCWlmIG9zLnBhdGguaXNmaWxlKGFyZ3Mucm9vdGtleSk6CisJCQlST09US0VZID0g YXJncy5yb290a2V5CisJCWVsc2U6CisJCQlwcmludCgiaWdub3JlZCBzcGVjaWZpZWQgbm9uLWV4 aXN0aW5nIHJvb3RrZXkgZmlsZSAlcyIlYXJncy5yb290a2V5KQorCisJIyBjaGVjayB3aGV0aGVy IGl0J3MgQVNDSUkgb3IgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gUHVubnljb2RlCisJdHJ5 OgorCQlhcmdzLmhvc3QuZW5jb2RlKCdhc2NpaScpCisJZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJv cjoKKwkJYXJncy5ob3N0ID0gc3RyKGFyZ3MuaG9zdC5lbmNvZGUoJ2lkbmEnKSwgJ3V0Zi04JykK KworCWlmIGFyZ3MuaG9zdFstMV0gIT0gJy4nOgorCQlhcmdzLmhvc3QgKz0gJy4nCisJc25paG9z dCA9IGFyZ3MuaG9zdFswOi0xXQorCisJaWYgbm90IGFyZ3Muc3RhcnR0bHM6CisJCWlmIGFyZ3Mu cG9ydCA9PSAiMjUiIG9yIGFyZ3MucG9ydCA9PSAiNTg3IjoKKwkJCWFyZ3Muc3RhcnR0bHMgPSAi c210cCIKKwkJZWxpZiBhcmdzLnBvcnQgPT0gIjE0MyI6CisJCQlhcmdzLnN0YXJ0dGxzID0gImlt YXAiCisJCWVsaWYgYXJncy5wb3J0ID09ICIxMTAiOgorCQkJYXJncy5zdGFydHRscyA9ICJwb3Az IgorCQllbGlmIGFyZ3MucG9ydCA9PSAiMjEiOgorCQkJYXJncy5zdGFydHRscyA9ICJmdHAiCisJ ZWxpZiBhcmdzLnN0YXJ0dGxzID09ICJubyI6CisJCWFyZ3Muc3RhcnR0bHMgPSBOb25lCisKKwln bG9iYWwgcmVzb2x2Y29uZgorCWlmIGFyZ3MucmVzb2x2Y29uZjoKKwkJaWYgb3MucGF0aC5pc2Zp bGUoYXJncy5yZXNvbHZjb25mKToKKwkJCXJlc29sdmNvbmYgPSBhcmdzLnJlc29sdmNvbmYKKwkJ ZWxzZToKKwkJCXByaW50KCclcyBpcyBub3QgYSBmaWxlLiBVbmFibGUgdG8gdXNlIGl0IGFzIHJl c29sdi5jb25mJyAlIGFyZ3MucmVzb2x2Y29uZiwgZmlsZT1zeXMuc3Rkb3V0KQorCQkJc3lzLmV4 aXQoMSkKKwllbHNlOgorCQlyZXNvbHZjb25mID0gTm9uZQorCisJIyBub3Qgb3BlcmF0aW9ucyBh cmUgZnVuIQorCXNlY3VyZSA9IG5vdCBhcmdzLmluc2VjdXJlCisKKwlpZiBhcmdzLnZlcmlmeToK KwkJcmVjb3JkcyA9IGdldFRMU0EoYXJncy5ob3N0LCBhcmdzLnBvcnQsIGFyZ3MucHJvdG9jb2ws IHNlY3VyZSkKKwkJaWYgbGVuKHJlY29yZHMpID09IDA6CisJCQlzeXMuZXhpdCgxKQorCQlwcmVf ZXhpdCA9IDAKKwkJZm9yIHJlY29yZCBpbiByZWNvcmRzOgorCQkJIyBGaXJzdCwgY2hlY2sgaWYg dGhlIGZpcnN0IHRocmVlIGZpZWxkcyBoYXZlIGNvcnJlY3QgdmFsdWVzLgorCQkJaWYgYXJncy5k ZWJ1ZzoKKwkJCQlwcmludCgnUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyByZWNvcmQgZm9yIG5hbWUg JXM6JyAlIHJlY29yZC5uYW1lKQorCQkJCXByaW50KCdcdFVzYWdlOlx0XHRcdFx0JWQgKCVzKScg JSAocmVjb3JkLnVzYWdlLCB7MDonQ0EgQ29uc3RyYWludCBbUEtJWC1DQV0nLCAxOidFbmQtRW50 aXR5IENvbnN0cmFpbnQgKyBjaGFpbiB0byBDQSBbUEtJWC1FRV0nLCAyOidUcnVzdCBBbmNob3Ig W0RBTkUtVEFdJywgMzonRW5kLUVudGl0eSBbREFORS1FRV0nfS5nZXQocmVjb3JkLnVzYWdlLCAn SU5WQUxJRCcpKSkKKwkJCQlwcmludCgnXHRTZWxlY3RvcjpcdFx0XHQlZCAoJXMpJyAlIChyZWNv cmQuc2VsZWN0b3IsIHswOidDZXJ0aWZpY2F0ZSBbQ2VydF0nLCAxOidTdWJqZWN0UHVibGljS2V5 SW5mbyBbU1BLSV0nfS5nZXQocmVjb3JkLnNlbGVjdG9yLCAnSU5WQUxJRCcpKSkKKwkJCQlwcmlu dCgnXHRNYXRjaGluZyBUeXBlOlx0XHRcdCVkICglcyknICUgKHJlY29yZC5tdHlwZSwgezA6J0Z1 bGwgQ2VydGlmaWNhdGUnLCAxOidTSEEtMjU2JywgMjonU0hBLTUxMid9LmdldChyZWNvcmQubXR5 cGUsICdJTlZBTElEJykpKQorCQkJCXByaW50KCdcdENlcnRpZmljYXRlIGZvciBBc3NvY2lhdGlv bjpcdCVzJyAlIHJlY29yZC5jZXJ0KQorCisJCQl0cnk6CisJCQkJcmVjb3JkLmlzVmFsaWQocmFp c2VFeGNlcHRpb249VHJ1ZSkKKwkJCWV4Y2VwdCBSZWNvcmRWYWxpZGl0eUV4Y2VwdGlvbiBhcyBl OgorCQkJCXByaW50KCdFcnJvcjogJXMnICUgc3RyKGUpLCBmaWxlPXN5cy5zdGRlcnIpCisJCQkJ Y29udGludWUKKwkJCWVsc2U6CisJCQkJaWYgYXJncy5kZWJ1ZzoKKwkJCQkJcHJpbnQoJ1RoaXMg cmVjb3JkIGlzIHZhbGlkICh3ZWxsLWZvcm1lZCkuJykKKworCQkJaWYgYXJncy5vbmx5X3JyOgor CQkJCSMgR28gdG8gdGhlIG5leHQgcmVjb3JkCisJCQkJY29udGludWUKKworCQkJIyBXaGVuIHdl IGFyZSBoZXJlLCBUaGUgdXNlciBhbHNvIHdhbnRzIHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGVz IHdpdGggdGhlIHJlY29yZAorCQkJaWYgYXJncy5wcm90b2NvbCAhPSAndGNwJzoKKwkJCQlwcmlu dCgnT25seSBTU0wgb3ZlciBUQ1AgaXMgc3VwcG9ydGVkIChzb3JyeSknLCBmaWxlPXN5cy5zdGRl cnIpCisJCQkJc3lzLmV4aXQoMCkKKworCQkJaWYgYXJncy5kZWJ1ZzoKKwkJCQlwcmludCgnQXR0 ZW1wdGluZyB0byB2ZXJpZnkgdGhlIHJlY29yZCB3aXRoIHRoZSBUTFMgc2VydmljZS4uLicpCisK KwkJCWlmIG5vdCBhcmdzLmlwdjQgYW5kIG5vdCBhcmdzLmlwdjY6CisJCQkJYWRkcmVzc2VzID0g Z2V0QShhcmdzLmhvc3QsIHNlY3VyZT1zZWN1cmUpICsgZ2V0QUFBQShhcmdzLmhvc3QsIHNlY3Vy ZT1zZWN1cmUpCisJCQllbGlmIGFyZ3MuaXB2NDoKKwkJCQlhZGRyZXNzZXMgPSBnZXRBKGFyZ3Mu aG9zdCwgc2VjdXJlPXNlY3VyZSkKKwkJCWVsc2U6CisJCQkJYWRkcmVzc2VzID0gZ2V0QUFBQShh cmdzLmhvc3QsIHNlY3VyZT1zZWN1cmUpCisKKwkJCWlmIGFyZ3MuY2VydGlmaWNhdGU6CisJCQkJ dHJ5OgorCQkJCQljaGFpbiwgdmVyaWZ5X3Jlc3VsdCA9IGdldExvY2FsQ2hhaW4oYXJncy5jZXJ0 aWZpY2F0ZSwgYXJncy5kZWJ1ZykKKwkJCQkJcHJlX2V4aXQgPSB2ZXJpZnlDaGFpbihyZWNvcmQs IGNoYWluLCB2ZXJpZnlfcmVzdWx0LCBwcmVfZXhpdCwgVHJ1ZSwgYXJncy5jZXJ0aWZpY2F0ZSkK KwkJCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQkJCXByaW50KCdDb3VsZCBub3QgdmVyaWZ5 IGxvY2FsIGNlcnRpZmljYXRlOiAlcy4nICUgZSkKKwkJCQkJc3lzLmV4aXQoMCkKKwkJCWZvciBh ZGRyZXNzIGluIGFkZHJlc3NlczoKKwkJCQlpZiBhcmdzLmRlYnVnOgorCQkJCQlwcmludCgnR290 IHRoZSBmb2xsb3dpbmcgSVA6ICVzJyAlIHN0cihhZGRyZXNzKSkKKwkJCQkjIFdlIGRvIHRoZSBj ZXJ0aWZpY2F0ZSBoYW5kbGluZyBoZXJlLCBhcyBNMkNyeXB0byBrZWVwcyBzZWdmYXVsdGluZyB3 aGVuIHdlIGRvIGl0IGluIGEgbWV0aG9kCisJCQkJY3R4ID0gU1NMLkNvbnRleHQoKQorCQkJCWlm IG9zLnBhdGguaXNmaWxlKGFyZ3MuY2FfY2VydCk6CisJCQkJCWlmIGN0eC5sb2FkX3ZlcmlmeV9s b2NhdGlvbnMoY2FmaWxlPWFyZ3MuY2FfY2VydCkgIT0gMTogcmFpc2UgRXhjZXB0aW9uKCdObyBD QSBjZXJ0JykKKwkJCQllbGlmIG9zLnBhdGguZXhpc3RzKGFyZ3MuY2FfY2VydCk6CisJCQkJCWlm IGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FwYXRoPWFyZ3MuY2FfY2VydCkgIT0gMTogcmFp c2UgRXhjZXB0aW9uKCdObyBDQSBjZXJ0cycpCisJCQkJZWxzZToKKwkJCQkJcHJpbnQoJyVzIGlz IG5laXRoZXIgYSBmaWxlIG5vciBhIGRpcmVjdG9yeSwgdW5hYmxlIHRvIGNvbnRpbnVlJyAlIGFy Z3MuY2FfY2VydCwgZmlsZT1zeXMuc3RkZXJyKQorCQkJCQlzeXMuZXhpdCgxKQorCQkJCSMgRG9u J3QgZXJyb3Igd2hlbiB0aGUgdmVyaWZpY2F0aW9uIGZhaWxzIGluIHRoZSBTU0wgaGFuZHNoYWtl CisJCQkJY3R4LnNldF92ZXJpZnkoU1NMLnZlcmlmeV9ub25lLCBkZXB0aD05KQorCQkJCWlmIGlz aW5zdGFuY2UoYWRkcmVzcywgQUFBQVJlY29yZCk6CisJCQkJCXNvY2sgPSBzb2NrZXQuc29ja2V0 KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCQkJCQlzb2NrLnNldHNvY2tv cHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisJCQkJZWxzZToK KwkJCQkJc29jayA9IE5vbmUKKwkJCQljb25uZWN0aW9uID0gU1NMLkNvbm5lY3Rpb24oY3R4LCBz b2NrPXNvY2spCisJCQkJdHJ5OgorCQkJCQljb25uZWN0aW9uLnNldF90bHNleHRfaG9zdF9uYW1l KHNuaWhvc3QpCisJCQkJCWlmKGFyZ3MuZGVidWcpOgorCQkJCQkJcHJpbnQoJ0RpZCBzZXQgc2Vy dmVybmFtZSAlcycgJSBzbmlob3N0KQorCQkJCWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKwkJCQkJ cHJpbnQoJ0NvdWxkIG5vdCBzZXQgU05JIChvbGQgTTJDcnlwdG8gdmVyc2lvbj8pJykKKwkJCQll eGNlcHQ6CisJCQkJCXByaW50KCdDb3VsZCBub3Qgc2V0IFNOSScpCisJCQkJdHJ5OgorCQkJCQlp ZiBhcmdzLnN0YXJ0dGxzOgorCQkJCQkJc3NsU3RhcnRUTFNDb25uZWN0KGNvbm5lY3Rpb24sIChz dHIoYWRkcmVzcyksIGludChhcmdzLnBvcnQpKSwgYXJncy5zdGFydHRscykKKwkJCQkJCSNjb25u ZWN0aW9uLmNvbm5lY3QoKHN0cihhZGRyZXNzKSwgaW50KGFyZ3MucG9ydCkpLCBhcmdzLnN0YXJ0 dGxzKQorCQkJCQllbHNlOgorCQkJCQkJY29ubmVjdGlvbi5jb25uZWN0KChzdHIoYWRkcmVzcyks IGludChhcmdzLnBvcnQpKSkKKwkJCQkjZXhjZXB0IFR5cGVFcnJvcjoKKwkJCQkjCXByaW50ICdD YW5ub3QgY29ubmVjdCB0byAlcyAob2xkIE0yQ3J5cHRvIHZlcnNpb24gbm90IHN1cHBvcnRpbmcg c3RhcnQgc2NyaXB0PyknICUgYWRkcmVzcworCQkJCSMJY29udGludWUKKwkJCQlleGNlcHQgU1NM LkNoZWNrZXIuV3JvbmdIb3N0IGFzIGU6CisJCQkJCSMgVGhlIG5hbWUgb24gdGhlIHJlbW90ZSBj ZXJ0IGRvZXNuJ3QgbWF0Y2ggdGhlIGhvc3RuYW1lIGJlY2F1c2Ugd2UgY29ubmVjdCBvbiBJUCwg bm90IGhvc3RuYW1lIChhcyB3ZSB3YW50IHNlY3VyZSBsb29rdXApCisJCQkJCXBhc3MKKwkJCQll eGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisJCQkJCXByaW50KCdDYW5ub3QgY29ubmVjdCB0byAl czogJXMnICUgKGFkZHJlc3MsIHN0cihlKSkpCisJCQkJCWNvbnRpbnVlCisJCQkJY2hhaW4gPSBj b25uZWN0aW9uLmdldF9wZWVyX2NlcnRfY2hhaW4oKQorCQkJCXZlcmlmeV9yZXN1bHQgPSBjb25u ZWN0aW9uLmdldF92ZXJpZnlfcmVzdWx0KCkKKworCQkJCSMgR29vZCwgbm93IGxldCdzIHZlcmlm eQorCQkJCXByZV9leGl0ID0gdmVyaWZ5Q2hhaW4ocmVjb3JkLCBjaGFpbiwgdmVyaWZ5X3Jlc3Vs dCwgcHJlX2V4aXQsIEZhbHNlLCBhZGRyZXNzKQorCQkJCSMgQ2xlYW51cCwganVzdCBpbiBjYXNl CisJCQkJY29ubmVjdGlvbi5jbGVhcigpCisJCQkJY29ubmVjdGlvbi5jbG9zZSgpCisJCQkJY3R4 LmNsb3NlKCkKKworCQkJIyBFTkQgZm9yIGFkZHJlc3MgaW4gYWRkcmVzc2VzCisJCSMgRU5EIGZv ciByZWNvcmQgaW4gcmVjb3JkcworCQlzeXMuZXhpdChwcmVfZXhpdCkKKwkjIEVORCBpZiBhcmdz LnZlcmlmeQorCisJZWxzZTogIyB3ZSB3YW50IHRvIGNyZWF0ZQorCQljZXJ0ID0gTm9uZQorCQlp ZiBub3QgYXJncy5jZXJ0aWZpY2F0ZToKKwkJCWlmIGFyZ3MucHJvdG9jb2wgIT0gJ3RjcCc6CisJ CQkJcHJpbnQoJ09ubHkgU1NMIG92ZXIgVENQIGlzIHN1cHBvcnRlZCAoc29ycnkpJywgZmlsZT1z eXMuc3RkZXJyKQorCQkJCXN5cy5leGl0KDEpCisJCQlpZiBhcmdzLmRlYnVnOgorCQkJCXByaW50 KCdObyBjZXJ0aWZpY2F0ZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLCBhdHRlbXB0aW5n IHRvIHJldHJpZXZlIGl0IGZyb20gdGhlIHNlcnZlciAlcycgJSAoYXJncy5ob3N0KSkKKwkJCWNv bm5lY3Rpb25fcG9ydCA9IGFyZ3MucG9ydAorCQkJaWYgYXJncy5wb3J0ID09ICcqJzoKKwkJCQlz eXMuc3Rkb3V0LndyaXRlKCdUaGUgcG9ydCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lIGlz ICosIHBsZWFzZSBzcGVjaWZ5IHRoZSBwb3J0IG9mIHRoZSBUTFMgc2VydmljZSBvbiAlcyAoNDQz KTogJyAlIGFyZ3MuaG9zdCkKKwkJCQlpbnB1dF9vayA9IEZhbHNlCisJCQkJd2hpbGUgbm90IGlu cHV0X29rOgorCQkJCQl1c2VyX2lucHV0ID0gaW5wdXQoKQorCQkJCQlpZiB1c2VyX2lucHV0ID09 ICcnOgorCQkJCQkJY29ubmVjdGlvbl9wb3J0ID0gNDQzCisJCQkJCQlicmVhaworCQkJCQl0cnk6 CisJCQkJCQlpZiAxIDw9IGludCh1c2VyX2lucHV0KSA8PSA2NTUzNToKKwkJCQkJCQljb25uZWN0 aW9uX3BvcnQgPSB1c2VyX2lucHV0CisJCQkJCQkJaW5wdXRfb2sgPSBUcnVlCisJCQkJCWV4Y2Vw dDoKKwkJCQkJCXN5cy5zdGRvdXQud3JpdGUoJ1BvcnQgJXMgbm90IG51bWVyaWNhbCBvciB3aXRo aW4gY29ycmVjdCByYW5nZSAoMSA8PSBwb3J0IDw9IDY1NTM1KSwgdHJ5IGFnYWluIChoaXQgZW50 ZXIgZm9yIGRlZmF1bHQgNDQzKTogJyAlIHVzZXJfaW5wdXQpCisJCQkjIEdldCB0aGUgYWRkcmVz cyByZWNvcmRzIGZvciB0aGUgaG9zdAorCQkJdHJ5OgorCQkJCSNhZGRyZXNzZXMgPSBnZXRBKGFy Z3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkgKyBnZXRBQUFBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3Vy ZSkKKwkJCQlpZiBub3QgYXJncy5pcHY0IGFuZCBub3QgYXJncy5pcHY2OgorCQkJCQlhZGRyZXNz ZXMgPSBnZXRBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkgKyBnZXRBQUFBKGFyZ3MuaG9zdCwg c2VjdXJlPXNlY3VyZSkKKworCQkJCWVsaWYgYXJncy5pcHY0OgorCQkJCQlhZGRyZXNzZXMgPSBn ZXRBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkKKwkJCQllbHNlOgorCQkJCQlhZGRyZXNzZXMg PSBnZXRBQUFBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkKKworCQkJZXhjZXB0IEluc2VjdXJl TG9va3VwRXhjZXB0aW9uIGFzIGU6CisJCQkJcHJpbnQoc3RyKGUpLCBmaWxlPXN5cy5zdGRlcnIp CisJCQkJc3lzLmV4aXQoMSkKKworCQkJZm9yIGFkZHJlc3MgaW4gYWRkcmVzc2VzOgorCQkJCWlm IGFyZ3MuZGVidWc6CisJCQkJCXByaW50KCdBdHRlbXB0aW5nIHRvIGdldCBjZXJ0aWZpY2F0ZSBm cm9tICVzJyAlIHN0cihhZGRyZXNzKSkKKwkJCQkjIFdlIGRvIHRoZSBjZXJ0aWZpY2F0ZSBoYW5k bGluZyBoZXJlLCBhcyBNMkNyeXB0byBrZWVwcyBzZWdmYXVsdGluZyB3aGVuIHRyeSB0byBkbyBz dHVmZiB3aXRoIHRoZSBjZXJ0IGlmIHdlIGRvbid0CisJCQkJY3R4ID0gU1NMLkNvbnRleHQoKQor CQkJCWN0eC5zZXRfdmVyaWZ5KFNTTC52ZXJpZnlfbm9uZSwgZGVwdGg9OSkKKwkJCQlpZiBpc2lu c3RhbmNlKGFkZHJlc3MsIEFBQUFSZWNvcmQpOgorCQkJCQlzb2NrID0gc29ja2V0LnNvY2tldChz b2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkKKwkJCQkJc29jay5zZXRzb2Nrb3B0 KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorCQkJCWVsc2U6CisJ CQkJCXNvY2sgPSBOb25lCisJCQkJY29ubmVjdGlvbiA9IFNTTC5Db25uZWN0aW9uKGN0eCwgc29j az1zb2NrKQorCQkJCXRyeToKKwkJCQkJY29ubmVjdGlvbi5zZXRfdGxzZXh0X2hvc3RfbmFtZShz bmlob3N0KQorCQkJCQlpZihhcmdzLmRlYnVnKToKKwkJCQkJCXByaW50KCdEaWQgc2V0IHNlcnZl cm5hbWUgJXMnICUgc25paG9zdCkKKwkJCQlleGNlcHQgQXR0cmlidXRlRXJyb3I6CisJCQkJCXBy aW50KCdDb3VsZCBub3Qgc2V0IFNOSSAob2xkIE0yQ3J5cHRvIHZlcnNpb24/KScpCisJCQkJZXhj ZXB0OgorCQkJCQlwcmludCgnQ291bGQgbm90IHNldCBTTkknKQorCQkJCXRyeToKKwkJCQkJaWYg YXJncy5zdGFydHRsczoKKwkJCQkJCXNzbFN0YXJ0VExTQ29ubmVjdChjb25uZWN0aW9uLCAoc3Ry KGFkZHJlc3MpLCBpbnQoY29ubmVjdGlvbl9wb3J0KSksIGFyZ3Muc3RhcnR0bHMpCisJCQkJCQkj Y29ubmVjdGlvbi5jb25uZWN0KChzdHIoYWRkcmVzcyksIGludChjb25uZWN0aW9uX3BvcnQpKSwg YXJncy5zdGFydHRscykKKwkJCQkJZWxzZToKKwkJCQkJCWNvbm5lY3Rpb24uY29ubmVjdCgoc3Ry KGFkZHJlc3MpLCBpbnQoY29ubmVjdGlvbl9wb3J0KSkpCisJCQkJI2V4Y2VwdCBUeXBlRXJyb3I6 CisJCQkJIwlwcmludCAnQ2Fubm90IGNvbm5lY3QgdG8gJXMgKG9sZCBNMkNyeXB0byB2ZXJzaW9u IG5vdCBzdXBwb3J0aW5nIHN0YXJ0IHNjcmlwdD8pJyAlIGFkZHJlc3MKKwkJCQkjCWNvbnRpbnVl CisJCQkJZXhjZXB0IFNTTC5DaGVja2VyLldyb25nSG9zdDoKKwkJCQkJcGFzcworCQkJCWV4Y2Vw dCBzb2NrZXQuZXJyb3IgYXMgZToKKwkJCQkJcHJpbnQoJ0Nhbm5vdCBjb25uZWN0IHRvICVzOiAl cycgJSAoYWRkcmVzcywgc3RyKGUpKSkKKwkJCQkJY29udGludWUKKworCQkJCWNoYWluID0gY29u bmVjdGlvbi5nZXRfcGVlcl9jZXJ0X2NoYWluKCkKKwkJCQlpZiBub3QgdmVyaWZ5Q2VydE5hbWVX aXRoSG9zdE5hbWUoY2VydD1jaGFpblswXSwgaG9zdG5hbWU9c3RyKGFyZ3MuaG9zdCksIHdpdGhf bXNnPWFyZ3MuZGVidWcpOgorCQkJCQlwcmludCgnV0FSTklORzogQ2VydGlmaWNhdGUgbmFtZSBk b2VzIG5vdCBtYXRjaCB0aGUgaG9zdG5hbWUnKQorCQkJCWdlblJlY29yZHMoYXJncy5ob3N0LCBh ZGRyZXNzLCBhcmdzLnByb3RvY29sLCBhcmdzLnBvcnQsIGNoYWluLCBhcmdzLm91dHB1dCwgYXJn cy51c2FnZSwgYXJncy5zZWxlY3RvciwgYXJncy5tdHlwZSkKKwkJCQkjIENsZWFudXAgdGhlIGNv bm5lY3Rpb24gYW5kIGNvbnRleHQKKwkJCQljb25uZWN0aW9uLmNsZWFyKCkKKwkJCQljb25uZWN0 aW9uLmNsb3NlKCkKKwkJCQljdHguY2xvc2UoKQorCisJCWVsc2U6ICMgUGFzcyB0aGUgcGF0aCB0 byB0aGUgY2VydGlmaWNhdGUgdG8gdGhlIGdlblRMU0EgZnVuY3Rpb24KKwkJCXRyeToKKwkJCQlj aGFpbiwgdmVyaWZ5X3Jlc3VsdCA9IGdldExvY2FsQ2hhaW4oYXJncy5jZXJ0aWZpY2F0ZSwgYXJn cy5kZWJ1ZykKKwkJCQlpZiBhcmdzLnVzYWdlID09IDAgb3IgYXJncy51c2FnZSA9PSAxIGFuZCBu b3QgdmVyaWZ5X3Jlc3VsdDoKKwkJCQkJcHJpbnQoJ0ZvbGxvd2luZyBlcnJvciB3YXMgcmFpc2Vk IGR1cmluZyBQS0lYIHZhbGlkYXRpb246ICVzJyAlIHZlcmlmeV9yZXN1bHQpCisJCQkJZ2VuUmVj b3JkcyhhcmdzLmhvc3QsIGFyZ3MuaG9zdCwgYXJncy5wcm90b2NvbCwgYXJncy5wb3J0LCBjaGFp biwgYXJncy5vdXRwdXQsIGFyZ3MudXNhZ2UsIGFyZ3Muc2VsZWN0b3IsIGFyZ3MubXR5cGUpCisJ CQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQkJcHJpbnQoJ0NvdWxkIG5vdCB2ZXJpZnkgbG9j YWwgY2VydGlmaWNhdGU6ICVzLicgJSBlKQo=